<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://edurange.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Data_Store_Project_Charter</id>
	<title>Data Store Project Charter - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://edurange.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Data_Store_Project_Charter"/>
	<link rel="alternate" type="text/html" href="http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;action=history"/>
	<updated>2026-05-13T21:48:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;diff=920&amp;oldid=prev</id>
		<title>Jwgranville at 20:30, 27 April 2026</title>
		<link rel="alternate" type="text/html" href="http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;diff=920&amp;oldid=prev"/>
		<updated>2026-04-27T20:30:27Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:30, 27 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l23&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Crux:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;We really need to...&amp;quot;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Crux:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;We really need to...&amp;quot;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Support reproducibility and total recall as a first-class feature/responsibility of the data store service.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Support reproducibility and total recall as a first-class feature/responsibility of the data store service.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Make data provenance and append-only features invisible to API consumers whose only need access &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;to &lt;/del&gt;a projected storage interface.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Make data provenance and append-only features invisible to API consumers whose only need &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;is to &lt;/ins&gt;access a projected storage interface.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Framing Checklist: ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Framing Checklist: ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key eduwiki:diff:1.41:old-919:rev-920:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Jwgranville</name></author>
	</entry>
	<entry>
		<id>http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;diff=919&amp;oldid=prev</id>
		<title>Jwgranville at 20:20, 27 April 2026</title>
		<link rel="alternate" type="text/html" href="http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;diff=919&amp;oldid=prev"/>
		<updated>2026-04-27T20:20:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:20, 27 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide storage that can reconstruct/retrieve/replay all observations and their influence on manifestations/projections; storage is lossless.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide storage that can reconstruct/retrieve/replay all observations and their influence on manifestations/projections; storage is lossless.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide storage that is inseparable; all persistent manifestations are packaged within one cohesive container, such that clients of the data store do not need to micromanage where their data is persisted - the application bundles all data related to a run and the storage module is responsible for ensuring persistent representations are available to API clients.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide storage that is inseparable; all persistent manifestations are packaged within one cohesive container, such that clients of the data store do not need to micromanage where their data is persisted - the application bundles all data related to a run and the storage module is responsible for ensuring persistent representations are available to API clients.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide storage that supports first-class representation of experimental/software version provenance and other metadata (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;extensibly &lt;/del&gt;by, but not the responsibility of, API clients).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide storage that supports first-class representation of experimental/software version provenance and other metadata (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;extensible &lt;/ins&gt;by, but not the responsibility of, API clients).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide a storage API which is consistent across developer/client API needs, yet supple and accommodating to diverse record types, manifestations and projection strategies.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;** Provide a storage API which is consistent across developer/client API needs, yet supple and accommodating to diverse record types, manifestations and projection strategies.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Crux:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;We really need to...&amp;quot;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;Crux:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;We really need to...&amp;quot;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key eduwiki:diff:1.41:old-918:rev-919:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Jwgranville</name></author>
	</entry>
	<entry>
		<id>http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;diff=918&amp;oldid=prev</id>
		<title>Jwgranville: Created page with &quot;== Scoping Outline: ==  === Challenges: ===  * &#039;&#039;&#039;What:&#039;&#039;&#039; &#039;&#039;&quot;Create ways to...&quot; / &quot;Redesign the...&quot;&#039;&#039; ** Design a data governance process that does not require general users (often junior developers) to actively comply with and knowingly implement team-wide policy. ** Create a cohesive way for internal API consumers to specify their access, organization and persistence policies for application/experiment data. * &#039;&#039;&#039;For Whom:&#039;&#039;&#039; &#039;&#039;&quot;For &lt;user&gt;... (considering &lt;other stake...&quot;</title>
		<link rel="alternate" type="text/html" href="http://edurange.org/wiki/index.php?title=Data_Store_Project_Charter&amp;diff=918&amp;oldid=prev"/>
		<updated>2026-04-27T18:51:34Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;== Scoping Outline: ==  === Challenges: ===  * &amp;#039;&amp;#039;&amp;#039;What:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;Create ways to...&amp;quot; / &amp;quot;Redesign the...&amp;quot;&amp;#039;&amp;#039; ** Design a data governance process that does not require general users (often junior developers) to actively comply with and knowingly implement team-wide policy. ** Create a cohesive way for internal API consumers to specify their access, organization and persistence policies for application/experiment data. * &amp;#039;&amp;#039;&amp;#039;For Whom:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;For &amp;lt;user&amp;gt;... (considering &amp;lt;other stake...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Scoping Outline: ==&lt;br /&gt;
&lt;br /&gt;
=== Challenges: ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;What:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;Create ways to...&amp;quot; / &amp;quot;Redesign the...&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
** Design a data governance process that does not require general users (often junior developers) to actively comply with and knowingly implement team-wide policy.&lt;br /&gt;
** Create a cohesive way for internal API consumers to specify their access, organization and persistence policies for application/experiment data.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;For Whom:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;For &amp;lt;user&amp;gt;... (considering &amp;lt;other stakeholders&amp;gt;)...&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
** For developers of our platform, considering that future contributors or peers seeking to replicate our work need forward-compatible data sufficient for re-evaluation post hoc.&lt;br /&gt;
** ...And also considering that our own contributors are often junior developers, whose responsibility is to implement working application code on their individual projects, not to bear the burdens of policy compliance.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Context:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;In a world where...&amp;quot; / &amp;quot;Keeping in mind that...&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
** Keeping in mind that observations of student behavior - and generative/derived content delivered to students - are not repeatable/recoverable if unsaved, such that we need a storage method which always preserves original observations and their context/provenance.&lt;br /&gt;
** Keeping in mind that future contributors are often facing a heavy cognitive load when learning our codebase.&lt;br /&gt;
&lt;br /&gt;
=== Considerations: ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Goals:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;We aim to...&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
** Provide storage that supports arbitrary data manifestation and projection.&lt;br /&gt;
** Provide storage that can reconstruct/retrieve/replay all observations and their influence on manifestations/projections; storage is lossless.&lt;br /&gt;
** Provide storage that is inseparable; all persistent manifestations are packaged within one cohesive container, such that clients of the data store do not need to micromanage where their data is persisted - the application bundles all data related to a run and the storage module is responsible for ensuring persistent representations are available to API clients.&lt;br /&gt;
** Provide storage that supports first-class representation of experimental/software version provenance and other metadata (extensibly by, but not the responsibility of, API clients).&lt;br /&gt;
** Provide a storage API which is consistent across developer/client API needs, yet supple and accommodating to diverse record types, manifestations and projection strategies.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Crux:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;We really need to...&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
** Support reproducibility and total recall as a first-class feature/responsibility of the data store service.&lt;br /&gt;
** Make data provenance and append-only features invisible to API consumers whose only need access to a projected storage interface.&lt;br /&gt;
&lt;br /&gt;
== Framing Checklist: ==&lt;br /&gt;
We should discuss these qualities:&lt;br /&gt;
&lt;br /&gt;
* You tried on some behaviors (like empathy and rapid prototyping) on a current project before launching a new one.&lt;br /&gt;
* Project is a human, subjective challenge (understanding people is key to the project success).&lt;br /&gt;
* Project is geared toward discovery (not optimization).&lt;br /&gt;
* Challenge can be solved with a product, service, or event, not a strategy or system (for your first project).&lt;br /&gt;
* Those most affected by the work are acknowledged as actors with agency, not simply receivers of outcomes.&lt;br /&gt;
* Framing doesn’t embed a solution.&lt;br /&gt;
* Framing doesn’t (unintentionally) assume the form of the solution.&lt;br /&gt;
* Framing doesn’t (unintentionally) presume people’s needs.&lt;br /&gt;
* Goal of the project work is clear without dictating the specific solution outcome.&lt;br /&gt;
* You and your team actually care about this challenge. (If not, why are you doing it?)&lt;/div&gt;</summary>
		<author><name>Jwgranville</name></author>
	</entry>
</feed>