<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.faikvm.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JuliaLongtin</id>
	<title>CLAIF Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.faikvm.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JuliaLongtin"/>
	<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php/Special:Contributions/JuliaLongtin"/>
	<updated>2026-04-09T09:24:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=ASRock_H81m-HDS_(v1.0)&amp;diff=72</id>
		<title>ASRock H81m-HDS (v1.0)</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=ASRock_H81m-HDS_(v1.0)&amp;diff=72"/>
		<updated>2026-04-06T11:54:09Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the mainboard used to run our Xeon PHIs. We run coreboot on them, for proper 64 bit bios memory addressing support. If you&#039;re purchasing these, note the position of the HDMI port in listings: one that stands away from the board is v2.0, and one that lays flat on the board is v1.0. We are only using boards of the latter type.&lt;br /&gt;
&lt;br /&gt;
There appear to be two standards for the serial header. This mainboard uses an uncommon one.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Renkforce_RF100&amp;diff=71</id>
		<title>Renkforce RF100</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Renkforce_RF100&amp;diff=71"/>
		<updated>2026-03-08T15:26:52Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: Create page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Main Wiring Harness&lt;br /&gt;
&lt;br /&gt;
The main wiring harness is a 16 pin ribbon cable, which has been broken out, and has had many ends crimped onto it.&lt;br /&gt;
&lt;br /&gt;
It&#039;s pinout is as follows:&lt;br /&gt;
&lt;br /&gt;
to replace it you will need a ribon cable crimper, a ferrule crimper, and a JST-XH 2.5 crimper.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=70</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=70"/>
		<updated>2026-03-08T14:53:43Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: add 3d printer root.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the CopyLeft Artificial Intelligence wiki!&lt;br /&gt;
&lt;br /&gt;
Here, you will find documents, howtos, and notes about our efforts to create CopyLeft respecting Free Software Artificial Intelligence systems.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== AutoDoc ===&lt;br /&gt;
&lt;br /&gt;
The [[AutoDoc]] project aims at converting Asciinema terminal recordings into structured events, annotations, and derived documentation artifacts using LLMs.&lt;br /&gt;
&lt;br /&gt;
* [[AnnotationStandard]]: Standard for the annotation file format used to annotate `asciinema` sessions.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
We have many hackers working in many locations. Here is where we describe our sites, so we can share infrastructure:&lt;br /&gt;
&lt;br /&gt;
* [[FAIKVM.COM]]&lt;br /&gt;
* [[LIBRECODE.EU]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Like all projects, we have hardware dependencies. We try to document them, and their behaviors, so that our distributed team can reproduce one another&#039;s environments simply.&lt;br /&gt;
&lt;br /&gt;
Our infrastructure includes, but is not limited to the following devices:&lt;br /&gt;
* [[HP DL360 Gen9]]&lt;br /&gt;
* [[IGEL M350C]]&lt;br /&gt;
* [[ASRock H81m-HDS (v1.0)]]&lt;br /&gt;
* [[DLink DWR-978]]&lt;br /&gt;
* [[Sophos SG105 (Rev 3)]]&lt;br /&gt;
&lt;br /&gt;
Our 3D printers include:&lt;br /&gt;
* [[Renkforce RF100]]&lt;br /&gt;
* [[Lulzbot Taz]]&lt;br /&gt;
&lt;br /&gt;
== FAIKVM ==&lt;br /&gt;
Our infrastructure stack is a combination of FAI, KVM, and a pile of shell scripts.&lt;br /&gt;
&lt;br /&gt;
This infrastructure includes, but is not limited to the following VM types:&lt;br /&gt;
* [[WikiServer]]&lt;br /&gt;
* [[KanServer]]&lt;br /&gt;
* [[FAIServer]]&lt;br /&gt;
* [[QEMUHost]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=69</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=69"/>
		<updated>2026-02-14T18:58:14Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: Add the brandenburg firewalls.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the CopyLeft Artificial Intelligence wiki!&lt;br /&gt;
&lt;br /&gt;
Here, you will find documents, howtos, and notes about our efforts to create CopyLeft respecting Free Software Artificial Intelligence systems.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== AutoDoc ===&lt;br /&gt;
&lt;br /&gt;
The [[AutoDoc]] project aims at converting Asciinema terminal recordings into structured events, annotations, and derived documentation artifacts using LLMs.&lt;br /&gt;
&lt;br /&gt;
* [[AnnotationStandard]]: Standard for the annotation file format used to annotate `asciinema` sessions.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
We have many hackers working in many locations. Here is where we describe our sites, so we can share infrastructure:&lt;br /&gt;
&lt;br /&gt;
* [[FAIKVM.COM]]&lt;br /&gt;
* [[LIBRECODE.EU]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Like all projects, we have hardware dependencies. We try to document them, and their behaviors, so that our distributed team can reproduce one another&#039;s environments simply.&lt;br /&gt;
&lt;br /&gt;
Our infrastructure includes, but is not limited to the following devices:&lt;br /&gt;
* [[HP DL360 Gen9]]&lt;br /&gt;
* [[IGEL M350C]]&lt;br /&gt;
* [[ASRock H81m-HDS (v1.0)]]&lt;br /&gt;
* [[DLink DWR-978]]&lt;br /&gt;
* [[Sophos SG105 (Rev 3)]]&lt;br /&gt;
&lt;br /&gt;
== FAIKVM ==&lt;br /&gt;
Our infrastructure stack is a combination of FAI, KVM, and a pile of shell scripts.&lt;br /&gt;
&lt;br /&gt;
This infrastructure includes, but is not limited to the following VM types:&lt;br /&gt;
* [[WikiServer]]&lt;br /&gt;
* [[KanServer]]&lt;br /&gt;
* [[FAIServer]]&lt;br /&gt;
* [[QEMUHost]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=IGEL_M350C&amp;diff=68</id>
		<title>IGEL M350C</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=IGEL_M350C&amp;diff=68"/>
		<updated>2026-01-29T00:43:43Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: add memory we know works.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the daily driver for many of us.&lt;br /&gt;
&lt;br /&gt;
It is capable of accepting up to 64GB of memory (2x32GB sticks).&lt;br /&gt;
&lt;br /&gt;
Known to work with:&lt;br /&gt;
* Samsung - M471A5244CB0-CTD - 4GB 1Rx16 PC4-2666v-sc0-11 (at 2400)&lt;br /&gt;
* TeamGroup - TED432G3200C22-SBK - 32GB DDR4 3200 CL22-22-22-52 1.2v (at 2400)&lt;br /&gt;
* ??? - F4-2400C16D-8GRS - 4GB DDR4 2400 CL16-16-16-39 1.2v (at 2133)&lt;br /&gt;
* Micron - 16ATF2G64HZ-2G1B1 - 16GB DDR4 2133 1.2v (at 2133)&lt;br /&gt;
&lt;br /&gt;
It&#039;s supplied by 12 volts, and will draw less than 5 amps.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=67</id>
		<title>AnnotationStandard</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=67"/>
		<updated>2026-01-25T23:20:54Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Phase 1: Recording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Annotation Standard =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Document Version:&#039;&#039;&#039; 2.0  &lt;br /&gt;
&#039;&#039;&#039;Last Updated:&#039;&#039;&#039; 2025-10-01  &lt;br /&gt;
&#039;&#039;&#039;Target Audience:&#039;&#039;&#039; Session recorders, annotators, reviewers&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
# [[#Glossary|Glossary]]&lt;br /&gt;
# [[#Overview &amp;amp; Purpose|Overview &amp;amp; Purpose]]&lt;br /&gt;
# [[#The Annotation Process|The Annotation Process]]&lt;br /&gt;
# [[#Annotation Standard|Annotation Standard]]&lt;br /&gt;
# [[#Application Guidelines|Application Guidelines]]&lt;br /&gt;
# [[#Technical Specification|Technical Specification]]&lt;br /&gt;
# [[#Quick Reference|Quick Reference]]&lt;br /&gt;
# [[#Complete Worked Example|Complete Worked Example]]&lt;br /&gt;
# [[#Appendices|Appendices]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Session&#039;&#039;&#039;  &lt;br /&gt;
An asciinema recording of a terminal session, typically showing the deployment or configuration of software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotated Session&#039;&#039;&#039;  &lt;br /&gt;
A session that has structured annotations added to it, conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recording&#039;&#039;&#039;  &lt;br /&gt;
The raw asciinema capture of terminal activity.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation&#039;&#039;&#039;  &lt;br /&gt;
Structured metadata added to a recording that describes what is happening, why, and the outcome.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timeline&#039;&#039;&#039;  &lt;br /&gt;
A hierarchical structure in the annotator tool where annotations are organized. Different goal levels exist on separate timelines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Goal Hierarchy&#039;&#039;&#039;  &lt;br /&gt;
The nested structure of goals, subgoals, and sub-subgoals that describe the overall task and its component steps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation Tag&#039;&#039;&#039;  &lt;br /&gt;
A specific marker type (e.g., &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;) used to categorize parts of the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person A (Recorder)&#039;&#039;&#039;  &lt;br /&gt;
The individual(s) who created the original terminal session recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person B (Annotator)&#039;&#039;&#039;  &lt;br /&gt;
The individual who interviews Person A and adds structured annotations to the recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.session File&#039;&#039;&#039;  &lt;br /&gt;
A zip file containing the annotated recording, audio transcriptions, and metadata conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overview &amp;amp; Purpose ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose of this document ===&lt;br /&gt;
&lt;br /&gt;
This document exists to:&lt;br /&gt;
* Provide an annotation process.&lt;br /&gt;
* Provide an annotation standard.&lt;br /&gt;
* Collect guidance for people participating in annotation.&lt;br /&gt;
&lt;br /&gt;
=== What are Annotated Sessions? ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;annotated session&#039;&#039;&#039; is an asciinema recording of terminal activity (typically software deployment) that has been enriched with structured annotations describing:&lt;br /&gt;
* What actions were performed&lt;br /&gt;
* Why those actions were taken&lt;br /&gt;
* Whether goals were achieved&lt;br /&gt;
* What mistakes occurred and their consequences&lt;br /&gt;
* What discoveries changed the approach&lt;br /&gt;
&lt;br /&gt;
=== Why Create Them? ===&lt;br /&gt;
&lt;br /&gt;
The AutoDocs project aims to train Large Language Models (LLMs) to understand and work with terminal recordings. Annotated sessions serve as training data, teaching models to:&lt;br /&gt;
* Recognize common deployment patterns&lt;br /&gt;
* Understand error recovery strategies&lt;br /&gt;
* Learn from human problem-solving approaches&lt;br /&gt;
* Eventually perform automatic annotation&lt;br /&gt;
&lt;br /&gt;
Once sufficient manual annotations exist, trained models can automatically annotate new sessions, enabling advanced tooling like automated documentation generation.&lt;br /&gt;
&lt;br /&gt;
=== Document Purpose ===&lt;br /&gt;
&lt;br /&gt;
This document provides:&lt;br /&gt;
# An annotation process for creating annotated sessions&lt;br /&gt;
# An annotation standard defining what to annotate and how&lt;br /&gt;
# Guidelines for annotators to ensure consistency and quality&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== The Annotation Process ==&lt;br /&gt;
&lt;br /&gt;
The process of creating an annotated session involves four distinct phases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Phase 1: Recording → Phase 2: Interview → Phase 3: Annotation → Phase 4: Submission&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 1: Recording ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Create a terminal recording of meaningful operations work, software development, or other terminal baased productive activities.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A (one or more individuals)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Set up the recording environment:&lt;br /&gt;
#* Use a Debian Stable system (see Appendix D)&lt;br /&gt;
#* Upgrade to unstable if required packages are missing&lt;br /&gt;
# VMs may be reused from previous deployments, or may be new&lt;br /&gt;
# Start the &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; recording client&lt;br /&gt;
# Attempt to do useful work&lt;br /&gt;
# Keep all input/output inside the terminal:&lt;br /&gt;
#* Use CLI web tools (&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, etc.)&lt;br /&gt;
# Stop recording when work is done&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; &amp;lt;code&amp;gt;.cast&amp;lt;/code&amp;gt; asciinema recording file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Common Issues:&#039;&#039;&#039;&lt;br /&gt;
* Using GUI tools&lt;br /&gt;
* Stopping recording too early&lt;br /&gt;
* Forgetting --stdin on asciinema&#039;s command line&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 2: Interview ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Ensure the annotator fully understands what was done and why.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A and Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Record audio of both sides separately&lt;br /&gt;
# Review the recording together (recommended)&lt;br /&gt;
# Explain what was done and why&lt;br /&gt;
# Record follow-up clarification conversations if needed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039;&lt;br /&gt;
* Audio recordings (both sides)&lt;br /&gt;
* Full understanding of actions and rationale&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why Separate Audio Recordings?&#039;&#039;&#039;&lt;br /&gt;
* Better transcription quality&lt;br /&gt;
* Clear speaker attribution&lt;br /&gt;
* Higher-quality training data&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended ways to review the recording together:&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;tmate&amp;lt;/code&amp;gt; + asciinema playback can work (during playback, holding &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; fast-forwards)&lt;br /&gt;
* Screen share while watching the recording&lt;br /&gt;
* Screen share while using the annotator tool&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you break into a separate “experimental” session during the meeting:&#039;&#039;&#039;&lt;br /&gt;
* This is allowed and often useful.&lt;br /&gt;
* Record that new session with &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; as well, so it can be reviewed and understood by someone who was not present.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 3: Annotation ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Add structured annotations using the annotator tool.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Load the recording&lt;br /&gt;
# Create timelines for goal hierarchy levels&lt;br /&gt;
# Apply annotations per standard (see [[#Annotation Standard|Annotation Standard]])&lt;br /&gt;
# Review for completeness and consistency&lt;br /&gt;
# Note the spec version used for this annotation (this document version)&lt;br /&gt;
# If clarification is needed, contact Person A:&lt;br /&gt;
#* Record audio of both ends of the clarification conversation&lt;br /&gt;
#* Include the audio (and later transcription) in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; package&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotator tool:&#039;&#039;&#039;&lt;br /&gt;
* Use the annotator tool hosted at: &amp;lt;code&amp;gt;https://github.com/arthurwolf/annotator&amp;lt;/code&amp;gt;&lt;br /&gt;
* (If a specific branch is required for a cohort/release, use the branch specified by the project, e.g. &amp;lt;code&amp;gt;from_students&amp;lt;/code&amp;gt; when applicable.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; Annotated recording&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 4: Submission ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Package and submit the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Transcribe audio with Whisper (with timestamps)&lt;br /&gt;
# Create &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive&lt;br /&gt;
# Include required files (see [[#Technical Specification|Technical Specification]])&lt;br /&gt;
# Upload to repository&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Annotation Standard ==&lt;br /&gt;
&lt;br /&gt;
This section defines what to annotate and how.&lt;br /&gt;
&lt;br /&gt;
=== Goal hierarchy and timelines ===&lt;br /&gt;
&lt;br /&gt;
* Goals, subgoals, sub-subgoals (and deeper levels as needed) form a &#039;&#039;&#039;goal hierarchy&#039;&#039;&#039;.&lt;br /&gt;
* Ideally, every part of the session should belong to a goal.&lt;br /&gt;
* Subgoals should represent meaningful “chunks” of work contributing to a parent goal.&lt;br /&gt;
* Goals, subgoals, and sub-(sub…) goals should exist as &#039;&#039;&#039;separate timelines&#039;&#039;&#039; in the annotator tool:&lt;br /&gt;
** Think: one “Goal” timeline spanning the whole file,&lt;br /&gt;
** Subgoal timelines covering sections that represent large steps,&lt;br /&gt;
** Deeper timelines for finer-grained structure as needed.&lt;br /&gt;
&lt;br /&gt;
=== Success markers ===&lt;br /&gt;
&lt;br /&gt;
Use success markers to capture whether a goal (or subgoal) was achieved at the moment where the result is observable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt; — the goal was achieved (success is visible in the recording output)&lt;br /&gt;
* &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt; — the goal failed (failure is visible)&lt;br /&gt;
* &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; — success cannot be determined from the recording (or cannot possibly be visible)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When to apply success markers:&#039;&#039;&#039;&lt;br /&gt;
* Apply success markers only when the success/failure of a command corresponds to the attempted end of a goal.&lt;br /&gt;
* Example:&lt;br /&gt;
** If a goal is “get my program to compile”, then the output of &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; (where compilation occurs) is the target moment.&lt;br /&gt;
* For activities where the result cannot be observed (e.g., some parts of OS installs), &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== Tools and subtools (commands and interfaces) ===&lt;br /&gt;
&lt;br /&gt;
* Commands can be annotated as tools/subtools.&lt;br /&gt;
* Provide:&lt;br /&gt;
** An &#039;&#039;&#039;in-context&#039;&#039;&#039; description (considering the current goal and what has happened so far)&lt;br /&gt;
** Optionally, an &#039;&#039;&#039;out-of-context&#039;&#039;&#039; description (what the command generally does)&lt;br /&gt;
&lt;br /&gt;
This includes screen-based interactions when they are part of the workflow (if the annotator supports representing them).&lt;br /&gt;
&lt;br /&gt;
=== Mistakes ===&lt;br /&gt;
&lt;br /&gt;
Every mistake down to the typo should be tagged, including why it is a mistake and the repercussions.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt; — the incorrect action or decision&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt; — why it was wrong&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt; — what happened because of it (error message, time lost, wrong path taken, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Secrets and sensitive data ===&lt;br /&gt;
&lt;br /&gt;
Use specific tags for secrets and secret-like flows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Annotate secret handling carefully, and prefer describing the flow rather than reproducing secret material.&lt;br /&gt;
&lt;br /&gt;
=== Discoveries ===&lt;br /&gt;
&lt;br /&gt;
Discoveries are things learned during the session that change the plan/goals/approach.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or project’s chosen “Discoveries” tag) — a new fact that changes what happens next&lt;br /&gt;
* Apply when the discovery causes a change in goals, subgoals, or strategy.&lt;br /&gt;
&lt;br /&gt;
=== Licensing and legally significant text ===&lt;br /&gt;
&lt;br /&gt;
If you reproduce a “legally significant” portion of a licensed work (see GNU guidance on “Legally Significant”), list the license in your annotation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When in doubt, prefer summarizing instead of reproducing large chunks of licensed text.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Application Guidelines ==&lt;br /&gt;
&lt;br /&gt;
=== How to apply goal markers ===&lt;br /&gt;
&lt;br /&gt;
* When starting a goal, add a unique goal identifier (format guideline):&lt;br /&gt;
** &amp;lt;code&amp;gt;[Goal_ + Unique_identifier]&amp;lt;/code&amp;gt; followed by the goal description&lt;br /&gt;
* When a goal is completed:&lt;br /&gt;
** close out the goal and return to the parent goal level (change “level” back)&lt;br /&gt;
&lt;br /&gt;
=== How to apply mistakes ===&lt;br /&gt;
&lt;br /&gt;
Whenever there is a mistake:&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== How to apply success markers ===&lt;br /&gt;
&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; only when:&lt;br /&gt;
** The result of a goal is visible, OR&lt;br /&gt;
** The result cannot possibly be visible.&lt;br /&gt;
&lt;br /&gt;
=== General guidance ===&lt;br /&gt;
&lt;br /&gt;
* Annotate as you would prefer sessions to be annotated: be as in-depth as you would like.&lt;br /&gt;
* The goal of annotation is to describe precisely what is happening in the session:&lt;br /&gt;
** what is done,&lt;br /&gt;
** why it is done,&lt;br /&gt;
** and what outcome it leads to.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Technical Specification ==&lt;br /&gt;
&lt;br /&gt;
=== The .session archive ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file is a zip archive with a &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; extension containing (at minimum) the annotated recording and the supporting metadata and audio/transcripts.&lt;br /&gt;
&lt;br /&gt;
=== Required contents ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive must include:&lt;br /&gt;
* &amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; — session metadata (see below)&lt;br /&gt;
* &amp;lt;code&amp;gt;recording.asciinema&amp;lt;/code&amp;gt; — the asciinema recording (annotated)&lt;br /&gt;
* Audio recordings of the interview and any follow-up clarification conversations&lt;br /&gt;
* Transcriptions of those audio files (produced by Whisper), including timestamps&lt;br /&gt;
&lt;br /&gt;
=== session.yaml fields ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; should contain at least:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;: Version number for the format specification (this document) used when creating this &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Optional / planned fields (may be included if supported by the project tooling):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mission&amp;lt;/code&amp;gt; (FUTUREWORK): overarching goal being attempted&lt;br /&gt;
* &amp;lt;code&amp;gt;plan&amp;lt;/code&amp;gt; (FUTUREWORK): intended plan (does not need to match what happened)&lt;br /&gt;
* &amp;lt;code&amp;gt;tests&amp;lt;/code&amp;gt; (FUTUREWORK): an array of “unit test”-like checks indicating success/failure&lt;br /&gt;
** intended to be written in TinTin++&lt;br /&gt;
** loaded after an SSH session has been instantiated&lt;br /&gt;
** includes a time limit for considering the test to have gone wrong&lt;br /&gt;
** examples:&lt;br /&gt;
*** “X command was correctly installed to location Y”&lt;br /&gt;
*** “Running &amp;lt;code&amp;gt;command --version&amp;lt;/code&amp;gt; returns the right version 0.11”&lt;br /&gt;
* &amp;lt;code&amp;gt;system&amp;lt;/code&amp;gt; (optional): command/answer pairs that define the environment&lt;br /&gt;
** examples:&lt;br /&gt;
*** &amp;lt;code&amp;gt;cat /etc/issue.net&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;Ubuntu 22.04 LTS\n&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;ip address&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Core concepts ===&lt;br /&gt;
* Use separate timelines for each goal level (goal / subgoal / sub-subgoal).&lt;br /&gt;
* Add success markers only at moments where a goal outcome is observable (or provably unobservable).&lt;br /&gt;
&lt;br /&gt;
=== Common tags (non-exhaustive) ===&lt;br /&gt;
* Goals: &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt; (plus unique goal identifiers per project convention)&lt;br /&gt;
* Success: &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mistakes: &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secrets: &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
* Discoveries: &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or “Discoveries” tag used by the project)&lt;br /&gt;
* Licensing: &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tools: tool/subtool annotations (in-context and optionally out-of-context)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Complete Worked Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Goal_001] Deploy GNU package &amp;quot;foo&amp;quot; on Debian Stable VM&lt;br /&gt;
  [Subgoal_001a] Install build dependencies&lt;br /&gt;
    tool: apt-get install ...&lt;br /&gt;
    successResult: dependencies installed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001b] Configure build&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    mistake: used wrong configure flag&lt;br /&gt;
    mistakeReason: flag is not supported by this version&lt;br /&gt;
    mistakeResult: configure exits with error, must retry&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    successResult: configure completed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001c] Build and verify&lt;br /&gt;
    tool: make&lt;br /&gt;
    successResult: compilation completed&lt;br /&gt;
    tool: make test&lt;br /&gt;
    successUnknown: tests run but output does not clearly confirm pass/fail (or tests are not available)&lt;br /&gt;
&lt;br /&gt;
  discovery: package requires newer libc than expected → adjust approach / select different target or environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Replace identifiers, tags, and exact phrasing with the conventions supported by the current annotator tool version.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
&lt;br /&gt;
=== Appendix A: Recording environment reminders ===&lt;br /&gt;
* Use a Debian Stable VM for recordings.&lt;br /&gt;
* If Debian Stable lacks required packages, upgrading the VM to unstable is allowed.&lt;br /&gt;
* VMs may be reused across sessions.&lt;br /&gt;
&lt;br /&gt;
=== Appendix B: Keeping everything inside the terminal ===&lt;br /&gt;
* All input/output should be attempted through the terminal session.&lt;br /&gt;
* For web interactions, prefer CLI tools such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
=== Appendix C: Interview and follow-ups ===&lt;br /&gt;
* Record both sides separately for quality.&lt;br /&gt;
* If any follow-up clarification occurs later:&lt;br /&gt;
** record both ends again,&lt;br /&gt;
** include audio and transcripts in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Appendix D: Debian Stable VM details ===&lt;br /&gt;
(See project-specific VM setup instructions for the current cohort/repository; keep this appendix synchronized with those instructions.)&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=66</id>
		<title>AnnotationStandard</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=66"/>
		<updated>2026-01-25T23:18:33Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Annotation Standard =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Document Version:&#039;&#039;&#039; 2.0  &lt;br /&gt;
&#039;&#039;&#039;Last Updated:&#039;&#039;&#039; 2025-10-01  &lt;br /&gt;
&#039;&#039;&#039;Target Audience:&#039;&#039;&#039; Session recorders, annotators, reviewers&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
# [[#Glossary|Glossary]]&lt;br /&gt;
# [[#Overview &amp;amp; Purpose|Overview &amp;amp; Purpose]]&lt;br /&gt;
# [[#The Annotation Process|The Annotation Process]]&lt;br /&gt;
# [[#Annotation Standard|Annotation Standard]]&lt;br /&gt;
# [[#Application Guidelines|Application Guidelines]]&lt;br /&gt;
# [[#Technical Specification|Technical Specification]]&lt;br /&gt;
# [[#Quick Reference|Quick Reference]]&lt;br /&gt;
# [[#Complete Worked Example|Complete Worked Example]]&lt;br /&gt;
# [[#Appendices|Appendices]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Session&#039;&#039;&#039;  &lt;br /&gt;
An asciinema recording of a terminal session, typically showing the deployment or configuration of software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotated Session&#039;&#039;&#039;  &lt;br /&gt;
A session that has structured annotations added to it, conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recording&#039;&#039;&#039;  &lt;br /&gt;
The raw asciinema capture of terminal activity.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation&#039;&#039;&#039;  &lt;br /&gt;
Structured metadata added to a recording that describes what is happening, why, and the outcome.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timeline&#039;&#039;&#039;  &lt;br /&gt;
A hierarchical structure in the annotator tool where annotations are organized. Different goal levels exist on separate timelines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Goal Hierarchy&#039;&#039;&#039;  &lt;br /&gt;
The nested structure of goals, subgoals, and sub-subgoals that describe the overall task and its component steps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation Tag&#039;&#039;&#039;  &lt;br /&gt;
A specific marker type (e.g., &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;) used to categorize parts of the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person A (Recorder)&#039;&#039;&#039;  &lt;br /&gt;
The individual(s) who created the original terminal session recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person B (Annotator)&#039;&#039;&#039;  &lt;br /&gt;
The individual who interviews Person A and adds structured annotations to the recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.session File&#039;&#039;&#039;  &lt;br /&gt;
A zip file containing the annotated recording, audio transcriptions, and metadata conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overview &amp;amp; Purpose ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose of this document ===&lt;br /&gt;
&lt;br /&gt;
This document exists to:&lt;br /&gt;
* Provide an annotation process.&lt;br /&gt;
* Provide an annotation standard.&lt;br /&gt;
* Collect guidance for people participating in annotation.&lt;br /&gt;
&lt;br /&gt;
=== What are Annotated Sessions? ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;annotated session&#039;&#039;&#039; is an asciinema recording of terminal activity (typically software deployment) that has been enriched with structured annotations describing:&lt;br /&gt;
* What actions were performed&lt;br /&gt;
* Why those actions were taken&lt;br /&gt;
* Whether goals were achieved&lt;br /&gt;
* What mistakes occurred and their consequences&lt;br /&gt;
* What discoveries changed the approach&lt;br /&gt;
&lt;br /&gt;
=== Why Create Them? ===&lt;br /&gt;
&lt;br /&gt;
The AutoDocs project aims to train Large Language Models (LLMs) to understand and work with terminal recordings. Annotated sessions serve as training data, teaching models to:&lt;br /&gt;
* Recognize common deployment patterns&lt;br /&gt;
* Understand error recovery strategies&lt;br /&gt;
* Learn from human problem-solving approaches&lt;br /&gt;
* Eventually perform automatic annotation&lt;br /&gt;
&lt;br /&gt;
Once sufficient manual annotations exist, trained models can automatically annotate new sessions, enabling advanced tooling like automated documentation generation.&lt;br /&gt;
&lt;br /&gt;
=== Document Purpose ===&lt;br /&gt;
&lt;br /&gt;
This document provides:&lt;br /&gt;
# An annotation process for creating annotated sessions&lt;br /&gt;
# An annotation standard defining what to annotate and how&lt;br /&gt;
# Guidelines for annotators to ensure consistency and quality&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== The Annotation Process ==&lt;br /&gt;
&lt;br /&gt;
The process of creating an annotated session involves four distinct phases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Phase 1: Recording → Phase 2: Interview → Phase 3: Annotation → Phase 4: Submission&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 1: Recording ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Create a terminal recording of meaningful software deployment activity.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A (one or more individuals)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Set up the recording environment:&lt;br /&gt;
#* Use a Debian Stable VM (see Appendix D)&lt;br /&gt;
#* Upgrade to unstable if required packages are missing&lt;br /&gt;
# VMs may be reused from previous deployments, or may be new&lt;br /&gt;
# Start the &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; recording client&lt;br /&gt;
# Attempt to deploy a piece of GNU software&lt;br /&gt;
# Keep all input/output inside the terminal:&lt;br /&gt;
#* Use CLI web tools (&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, etc.)&lt;br /&gt;
# Stop recording when deployment completes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; &amp;lt;code&amp;gt;.cast&amp;lt;/code&amp;gt; asciinema recording file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Common Issues:&#039;&#039;&#039;&lt;br /&gt;
* Using GUI tools&lt;br /&gt;
* Stopping recording too early&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 2: Interview ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Ensure the annotator fully understands what was done and why.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A and Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Record audio of both sides separately&lt;br /&gt;
# Review the recording together (recommended)&lt;br /&gt;
# Explain what was done and why&lt;br /&gt;
# Record follow-up clarification conversations if needed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039;&lt;br /&gt;
* Audio recordings (both sides)&lt;br /&gt;
* Full understanding of actions and rationale&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why Separate Audio Recordings?&#039;&#039;&#039;&lt;br /&gt;
* Better transcription quality&lt;br /&gt;
* Clear speaker attribution&lt;br /&gt;
* Higher-quality training data&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended ways to review the recording together:&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;tmate&amp;lt;/code&amp;gt; + asciinema playback can work (during playback, holding &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; fast-forwards)&lt;br /&gt;
* Screen share while watching the recording&lt;br /&gt;
* Screen share while using the annotator tool&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you break into a separate “experimental” session during the meeting:&#039;&#039;&#039;&lt;br /&gt;
* This is allowed and often useful.&lt;br /&gt;
* Record that new session with &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; as well, so it can be reviewed and understood by someone who was not present.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 3: Annotation ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Add structured annotations using the annotator tool.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Load the recording&lt;br /&gt;
# Create timelines for goal hierarchy levels&lt;br /&gt;
# Apply annotations per standard (see [[#Annotation Standard|Annotation Standard]])&lt;br /&gt;
# Review for completeness and consistency&lt;br /&gt;
# Note the spec version used for this annotation (this document version)&lt;br /&gt;
# If clarification is needed, contact Person A:&lt;br /&gt;
#* Record audio of both ends of the clarification conversation&lt;br /&gt;
#* Include the audio (and later transcription) in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; package&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotator tool:&#039;&#039;&#039;&lt;br /&gt;
* Use the annotator tool hosted at: &amp;lt;code&amp;gt;https://github.com/arthurwolf/annotator&amp;lt;/code&amp;gt;&lt;br /&gt;
* (If a specific branch is required for a cohort/release, use the branch specified by the project, e.g. &amp;lt;code&amp;gt;from_students&amp;lt;/code&amp;gt; when applicable.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; Annotated recording&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 4: Submission ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Package and submit the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Transcribe audio with Whisper (with timestamps)&lt;br /&gt;
# Create &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive&lt;br /&gt;
# Include required files (see [[#Technical Specification|Technical Specification]])&lt;br /&gt;
# Upload to repository&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Annotation Standard ==&lt;br /&gt;
&lt;br /&gt;
This section defines what to annotate and how.&lt;br /&gt;
&lt;br /&gt;
=== Goal hierarchy and timelines ===&lt;br /&gt;
&lt;br /&gt;
* Goals, subgoals, sub-subgoals (and deeper levels as needed) form a &#039;&#039;&#039;goal hierarchy&#039;&#039;&#039;.&lt;br /&gt;
* Ideally, every part of the session should belong to a goal.&lt;br /&gt;
* Subgoals should represent meaningful “chunks” of work contributing to a parent goal.&lt;br /&gt;
* Goals, subgoals, and sub-(sub…) goals should exist as &#039;&#039;&#039;separate timelines&#039;&#039;&#039; in the annotator tool:&lt;br /&gt;
** Think: one “Goal” timeline spanning the whole file,&lt;br /&gt;
** Subgoal timelines covering sections that represent large steps,&lt;br /&gt;
** Deeper timelines for finer-grained structure as needed.&lt;br /&gt;
&lt;br /&gt;
=== Success markers ===&lt;br /&gt;
&lt;br /&gt;
Use success markers to capture whether a goal (or subgoal) was achieved at the moment where the result is observable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt; — the goal was achieved (success is visible in the recording output)&lt;br /&gt;
* &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt; — the goal failed (failure is visible)&lt;br /&gt;
* &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; — success cannot be determined from the recording (or cannot possibly be visible)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When to apply success markers:&#039;&#039;&#039;&lt;br /&gt;
* Apply success markers only when the success/failure of a command corresponds to the attempted end of a goal.&lt;br /&gt;
* Example:&lt;br /&gt;
** If a goal is “get my program to compile”, then the output of &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; (where compilation occurs) is the target moment.&lt;br /&gt;
* For activities where the result cannot be observed (e.g., some parts of OS installs), &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== Tools and subtools (commands and interfaces) ===&lt;br /&gt;
&lt;br /&gt;
* Commands can be annotated as tools/subtools.&lt;br /&gt;
* Provide:&lt;br /&gt;
** An &#039;&#039;&#039;in-context&#039;&#039;&#039; description (considering the current goal and what has happened so far)&lt;br /&gt;
** Optionally, an &#039;&#039;&#039;out-of-context&#039;&#039;&#039; description (what the command generally does)&lt;br /&gt;
&lt;br /&gt;
This includes screen-based interactions when they are part of the workflow (if the annotator supports representing them).&lt;br /&gt;
&lt;br /&gt;
=== Mistakes ===&lt;br /&gt;
&lt;br /&gt;
Every mistake down to the typo should be tagged, including why it is a mistake and the repercussions.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt; — the incorrect action or decision&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt; — why it was wrong&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt; — what happened because of it (error message, time lost, wrong path taken, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Secrets and sensitive data ===&lt;br /&gt;
&lt;br /&gt;
Use specific tags for secrets and secret-like flows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Annotate secret handling carefully, and prefer describing the flow rather than reproducing secret material.&lt;br /&gt;
&lt;br /&gt;
=== Discoveries ===&lt;br /&gt;
&lt;br /&gt;
Discoveries are things learned during the session that change the plan/goals/approach.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or project’s chosen “Discoveries” tag) — a new fact that changes what happens next&lt;br /&gt;
* Apply when the discovery causes a change in goals, subgoals, or strategy.&lt;br /&gt;
&lt;br /&gt;
=== Licensing and legally significant text ===&lt;br /&gt;
&lt;br /&gt;
If you reproduce a “legally significant” portion of a licensed work (see GNU guidance on “Legally Significant”), list the license in your annotation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When in doubt, prefer summarizing instead of reproducing large chunks of licensed text.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Application Guidelines ==&lt;br /&gt;
&lt;br /&gt;
=== How to apply goal markers ===&lt;br /&gt;
&lt;br /&gt;
* When starting a goal, add a unique goal identifier (format guideline):&lt;br /&gt;
** &amp;lt;code&amp;gt;[Goal_ + Unique_identifier]&amp;lt;/code&amp;gt; followed by the goal description&lt;br /&gt;
* When a goal is completed:&lt;br /&gt;
** close out the goal and return to the parent goal level (change “level” back)&lt;br /&gt;
&lt;br /&gt;
=== How to apply mistakes ===&lt;br /&gt;
&lt;br /&gt;
Whenever there is a mistake:&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== How to apply success markers ===&lt;br /&gt;
&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; only when:&lt;br /&gt;
** The result of a goal is visible, OR&lt;br /&gt;
** The result cannot possibly be visible.&lt;br /&gt;
&lt;br /&gt;
=== General guidance ===&lt;br /&gt;
&lt;br /&gt;
* Annotate as you would prefer sessions to be annotated: be as in-depth as you would like.&lt;br /&gt;
* The goal of annotation is to describe precisely what is happening in the session:&lt;br /&gt;
** what is done,&lt;br /&gt;
** why it is done,&lt;br /&gt;
** and what outcome it leads to.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Technical Specification ==&lt;br /&gt;
&lt;br /&gt;
=== The .session archive ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file is a zip archive with a &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; extension containing (at minimum) the annotated recording and the supporting metadata and audio/transcripts.&lt;br /&gt;
&lt;br /&gt;
=== Required contents ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive must include:&lt;br /&gt;
* &amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; — session metadata (see below)&lt;br /&gt;
* &amp;lt;code&amp;gt;recording.asciinema&amp;lt;/code&amp;gt; — the asciinema recording (annotated)&lt;br /&gt;
* Audio recordings of the interview and any follow-up clarification conversations&lt;br /&gt;
* Transcriptions of those audio files (produced by Whisper), including timestamps&lt;br /&gt;
&lt;br /&gt;
=== session.yaml fields ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; should contain at least:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;: Version number for the format specification (this document) used when creating this &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Optional / planned fields (may be included if supported by the project tooling):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mission&amp;lt;/code&amp;gt; (FUTUREWORK): overarching goal being attempted&lt;br /&gt;
* &amp;lt;code&amp;gt;plan&amp;lt;/code&amp;gt; (FUTUREWORK): intended plan (does not need to match what happened)&lt;br /&gt;
* &amp;lt;code&amp;gt;tests&amp;lt;/code&amp;gt; (FUTUREWORK): an array of “unit test”-like checks indicating success/failure&lt;br /&gt;
** intended to be written in TinTin++&lt;br /&gt;
** loaded after an SSH session has been instantiated&lt;br /&gt;
** includes a time limit for considering the test to have gone wrong&lt;br /&gt;
** examples:&lt;br /&gt;
*** “X command was correctly installed to location Y”&lt;br /&gt;
*** “Running &amp;lt;code&amp;gt;command --version&amp;lt;/code&amp;gt; returns the right version 0.11”&lt;br /&gt;
* &amp;lt;code&amp;gt;system&amp;lt;/code&amp;gt; (optional): command/answer pairs that define the environment&lt;br /&gt;
** examples:&lt;br /&gt;
*** &amp;lt;code&amp;gt;cat /etc/issue.net&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;Ubuntu 22.04 LTS\n&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;ip address&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Core concepts ===&lt;br /&gt;
* Use separate timelines for each goal level (goal / subgoal / sub-subgoal).&lt;br /&gt;
* Add success markers only at moments where a goal outcome is observable (or provably unobservable).&lt;br /&gt;
&lt;br /&gt;
=== Common tags (non-exhaustive) ===&lt;br /&gt;
* Goals: &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt; (plus unique goal identifiers per project convention)&lt;br /&gt;
* Success: &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mistakes: &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secrets: &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
* Discoveries: &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or “Discoveries” tag used by the project)&lt;br /&gt;
* Licensing: &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tools: tool/subtool annotations (in-context and optionally out-of-context)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Complete Worked Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Goal_001] Deploy GNU package &amp;quot;foo&amp;quot; on Debian Stable VM&lt;br /&gt;
  [Subgoal_001a] Install build dependencies&lt;br /&gt;
    tool: apt-get install ...&lt;br /&gt;
    successResult: dependencies installed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001b] Configure build&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    mistake: used wrong configure flag&lt;br /&gt;
    mistakeReason: flag is not supported by this version&lt;br /&gt;
    mistakeResult: configure exits with error, must retry&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    successResult: configure completed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001c] Build and verify&lt;br /&gt;
    tool: make&lt;br /&gt;
    successResult: compilation completed&lt;br /&gt;
    tool: make test&lt;br /&gt;
    successUnknown: tests run but output does not clearly confirm pass/fail (or tests are not available)&lt;br /&gt;
&lt;br /&gt;
  discovery: package requires newer libc than expected → adjust approach / select different target or environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Replace identifiers, tags, and exact phrasing with the conventions supported by the current annotator tool version.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
&lt;br /&gt;
=== Appendix A: Recording environment reminders ===&lt;br /&gt;
* Use a Debian Stable VM for recordings.&lt;br /&gt;
* If Debian Stable lacks required packages, upgrading the VM to unstable is allowed.&lt;br /&gt;
* VMs may be reused across sessions.&lt;br /&gt;
&lt;br /&gt;
=== Appendix B: Keeping everything inside the terminal ===&lt;br /&gt;
* All input/output should be attempted through the terminal session.&lt;br /&gt;
* For web interactions, prefer CLI tools such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
=== Appendix C: Interview and follow-ups ===&lt;br /&gt;
* Record both sides separately for quality.&lt;br /&gt;
* If any follow-up clarification occurs later:&lt;br /&gt;
** record both ends again,&lt;br /&gt;
** include audio and transcripts in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Appendix D: Debian Stable VM details ===&lt;br /&gt;
(See project-specific VM setup instructions for the current cohort/repository; keep this appendix synchronized with those instructions.)&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=65</id>
		<title>AnnotationStandard</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=65"/>
		<updated>2026-01-25T23:18:02Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Librecode Annotation Standard =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Document Version:&#039;&#039;&#039; 2.0  &lt;br /&gt;
&#039;&#039;&#039;Last Updated:&#039;&#039;&#039; 2025-10-01  &lt;br /&gt;
&#039;&#039;&#039;Target Audience:&#039;&#039;&#039; Session recorders, annotators, reviewers&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
# [[#Glossary|Glossary]]&lt;br /&gt;
# [[#Overview &amp;amp; Purpose|Overview &amp;amp; Purpose]]&lt;br /&gt;
# [[#The Annotation Process|The Annotation Process]]&lt;br /&gt;
# [[#Annotation Standard|Annotation Standard]]&lt;br /&gt;
# [[#Application Guidelines|Application Guidelines]]&lt;br /&gt;
# [[#Technical Specification|Technical Specification]]&lt;br /&gt;
# [[#Quick Reference|Quick Reference]]&lt;br /&gt;
# [[#Complete Worked Example|Complete Worked Example]]&lt;br /&gt;
# [[#Appendices|Appendices]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Session&#039;&#039;&#039;  &lt;br /&gt;
An asciinema recording of a terminal session, typically showing the deployment or configuration of software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotated Session&#039;&#039;&#039;  &lt;br /&gt;
A session that has structured annotations added to it, conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recording&#039;&#039;&#039;  &lt;br /&gt;
The raw asciinema capture of terminal activity.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation&#039;&#039;&#039;  &lt;br /&gt;
Structured metadata added to a recording that describes what is happening, why, and the outcome.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timeline&#039;&#039;&#039;  &lt;br /&gt;
A hierarchical structure in the annotator tool where annotations are organized. Different goal levels exist on separate timelines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Goal Hierarchy&#039;&#039;&#039;  &lt;br /&gt;
The nested structure of goals, subgoals, and sub-subgoals that describe the overall task and its component steps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation Tag&#039;&#039;&#039;  &lt;br /&gt;
A specific marker type (e.g., &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;) used to categorize parts of the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person A (Recorder)&#039;&#039;&#039;  &lt;br /&gt;
The individual(s) who created the original terminal session recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person B (Annotator)&#039;&#039;&#039;  &lt;br /&gt;
The individual who interviews Person A and adds structured annotations to the recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.session File&#039;&#039;&#039;  &lt;br /&gt;
A zip file containing the annotated recording, audio transcriptions, and metadata conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overview &amp;amp; Purpose ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose of this document ===&lt;br /&gt;
&lt;br /&gt;
This document exists to:&lt;br /&gt;
* Provide an annotation process.&lt;br /&gt;
* Provide an annotation standard.&lt;br /&gt;
* Collect guidance for people participating in annotation.&lt;br /&gt;
&lt;br /&gt;
=== What are Annotated Sessions? ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;annotated session&#039;&#039;&#039; is an asciinema recording of terminal activity (typically software deployment) that has been enriched with structured annotations describing:&lt;br /&gt;
* What actions were performed&lt;br /&gt;
* Why those actions were taken&lt;br /&gt;
* Whether goals were achieved&lt;br /&gt;
* What mistakes occurred and their consequences&lt;br /&gt;
* What discoveries changed the approach&lt;br /&gt;
&lt;br /&gt;
=== Why Create Them? ===&lt;br /&gt;
&lt;br /&gt;
The AutoDocs project aims to train Large Language Models (LLMs) to understand and work with terminal recordings. Annotated sessions serve as training data, teaching models to:&lt;br /&gt;
* Recognize common deployment patterns&lt;br /&gt;
* Understand error recovery strategies&lt;br /&gt;
* Learn from human problem-solving approaches&lt;br /&gt;
* Eventually perform automatic annotation&lt;br /&gt;
&lt;br /&gt;
Once sufficient manual annotations exist, trained models can automatically annotate new sessions, enabling advanced tooling like automated documentation generation.&lt;br /&gt;
&lt;br /&gt;
=== Document Purpose ===&lt;br /&gt;
&lt;br /&gt;
This document provides:&lt;br /&gt;
# An annotation process for creating annotated sessions&lt;br /&gt;
# An annotation standard defining what to annotate and how&lt;br /&gt;
# Guidelines for annotators to ensure consistency and quality&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== The Annotation Process ==&lt;br /&gt;
&lt;br /&gt;
The process of creating an annotated session involves four distinct phases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Phase 1: Recording → Phase 2: Interview → Phase 3: Annotation → Phase 4: Submission&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 1: Recording ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Create a terminal recording of meaningful software deployment activity.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A (one or more individuals)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Set up the recording environment:&lt;br /&gt;
#* Use a Debian Stable VM (see Appendix D)&lt;br /&gt;
#* Upgrade to unstable if required packages are missing&lt;br /&gt;
# VMs may be reused from previous deployments, or may be new&lt;br /&gt;
# Start the &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; recording client&lt;br /&gt;
# Attempt to deploy a piece of GNU software&lt;br /&gt;
# Keep all input/output inside the terminal:&lt;br /&gt;
#* Use CLI web tools (&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, etc.)&lt;br /&gt;
# Stop recording when deployment completes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; &amp;lt;code&amp;gt;.cast&amp;lt;/code&amp;gt; asciinema recording file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Common Issues:&#039;&#039;&#039;&lt;br /&gt;
* Using GUI tools&lt;br /&gt;
* Stopping recording too early&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 2: Interview ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Ensure the annotator fully understands what was done and why.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A and Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Record audio of both sides separately&lt;br /&gt;
# Review the recording together (recommended)&lt;br /&gt;
# Explain what was done and why&lt;br /&gt;
# Record follow-up clarification conversations if needed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039;&lt;br /&gt;
* Audio recordings (both sides)&lt;br /&gt;
* Full understanding of actions and rationale&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why Separate Audio Recordings?&#039;&#039;&#039;&lt;br /&gt;
* Better transcription quality&lt;br /&gt;
* Clear speaker attribution&lt;br /&gt;
* Higher-quality training data&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended ways to review the recording together:&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;tmate&amp;lt;/code&amp;gt; + asciinema playback can work (during playback, holding &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; fast-forwards)&lt;br /&gt;
* Screen share while watching the recording&lt;br /&gt;
* Screen share while using the annotator tool&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you break into a separate “experimental” session during the meeting:&#039;&#039;&#039;&lt;br /&gt;
* This is allowed and often useful.&lt;br /&gt;
* Record that new session with &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; as well, so it can be reviewed and understood by someone who was not present.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 3: Annotation ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Add structured annotations using the annotator tool.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Load the recording&lt;br /&gt;
# Create timelines for goal hierarchy levels&lt;br /&gt;
# Apply annotations per standard (see [[#Annotation Standard|Annotation Standard]])&lt;br /&gt;
# Review for completeness and consistency&lt;br /&gt;
# Note the spec version used for this annotation (this document version)&lt;br /&gt;
# If clarification is needed, contact Person A:&lt;br /&gt;
#* Record audio of both ends of the clarification conversation&lt;br /&gt;
#* Include the audio (and later transcription) in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; package&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotator tool:&#039;&#039;&#039;&lt;br /&gt;
* Use the annotator tool hosted at: &amp;lt;code&amp;gt;https://github.com/arthurwolf/annotator&amp;lt;/code&amp;gt;&lt;br /&gt;
* (If a specific branch is required for a cohort/release, use the branch specified by the project, e.g. &amp;lt;code&amp;gt;from_students&amp;lt;/code&amp;gt; when applicable.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; Annotated recording&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 4: Submission ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Package and submit the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Transcribe audio with Whisper (with timestamps)&lt;br /&gt;
# Create &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive&lt;br /&gt;
# Include required files (see [[#Technical Specification|Technical Specification]])&lt;br /&gt;
# Upload to repository&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Annotation Standard ==&lt;br /&gt;
&lt;br /&gt;
This section defines what to annotate and how.&lt;br /&gt;
&lt;br /&gt;
=== Goal hierarchy and timelines ===&lt;br /&gt;
&lt;br /&gt;
* Goals, subgoals, sub-subgoals (and deeper levels as needed) form a &#039;&#039;&#039;goal hierarchy&#039;&#039;&#039;.&lt;br /&gt;
* Ideally, every part of the session should belong to a goal.&lt;br /&gt;
* Subgoals should represent meaningful “chunks” of work contributing to a parent goal.&lt;br /&gt;
* Goals, subgoals, and sub-(sub…) goals should exist as &#039;&#039;&#039;separate timelines&#039;&#039;&#039; in the annotator tool:&lt;br /&gt;
** Think: one “Goal” timeline spanning the whole file,&lt;br /&gt;
** Subgoal timelines covering sections that represent large steps,&lt;br /&gt;
** Deeper timelines for finer-grained structure as needed.&lt;br /&gt;
&lt;br /&gt;
=== Success markers ===&lt;br /&gt;
&lt;br /&gt;
Use success markers to capture whether a goal (or subgoal) was achieved at the moment where the result is observable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt; — the goal was achieved (success is visible in the recording output)&lt;br /&gt;
* &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt; — the goal failed (failure is visible)&lt;br /&gt;
* &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; — success cannot be determined from the recording (or cannot possibly be visible)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When to apply success markers:&#039;&#039;&#039;&lt;br /&gt;
* Apply success markers only when the success/failure of a command corresponds to the attempted end of a goal.&lt;br /&gt;
* Example:&lt;br /&gt;
** If a goal is “get my program to compile”, then the output of &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; (where compilation occurs) is the target moment.&lt;br /&gt;
* For activities where the result cannot be observed (e.g., some parts of OS installs), &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== Tools and subtools (commands and interfaces) ===&lt;br /&gt;
&lt;br /&gt;
* Commands can be annotated as tools/subtools.&lt;br /&gt;
* Provide:&lt;br /&gt;
** An &#039;&#039;&#039;in-context&#039;&#039;&#039; description (considering the current goal and what has happened so far)&lt;br /&gt;
** Optionally, an &#039;&#039;&#039;out-of-context&#039;&#039;&#039; description (what the command generally does)&lt;br /&gt;
&lt;br /&gt;
This includes screen-based interactions when they are part of the workflow (if the annotator supports representing them).&lt;br /&gt;
&lt;br /&gt;
=== Mistakes ===&lt;br /&gt;
&lt;br /&gt;
Every mistake down to the typo should be tagged, including why it is a mistake and the repercussions.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt; — the incorrect action or decision&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt; — why it was wrong&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt; — what happened because of it (error message, time lost, wrong path taken, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Secrets and sensitive data ===&lt;br /&gt;
&lt;br /&gt;
Use specific tags for secrets and secret-like flows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Annotate secret handling carefully, and prefer describing the flow rather than reproducing secret material.&lt;br /&gt;
&lt;br /&gt;
=== Discoveries ===&lt;br /&gt;
&lt;br /&gt;
Discoveries are things learned during the session that change the plan/goals/approach.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or project’s chosen “Discoveries” tag) — a new fact that changes what happens next&lt;br /&gt;
* Apply when the discovery causes a change in goals, subgoals, or strategy.&lt;br /&gt;
&lt;br /&gt;
=== Licensing and legally significant text ===&lt;br /&gt;
&lt;br /&gt;
If you reproduce a “legally significant” portion of a licensed work (see GNU guidance on “Legally Significant”), list the license in your annotation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When in doubt, prefer summarizing instead of reproducing large chunks of licensed text.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Application Guidelines ==&lt;br /&gt;
&lt;br /&gt;
=== How to apply goal markers ===&lt;br /&gt;
&lt;br /&gt;
* When starting a goal, add a unique goal identifier (format guideline):&lt;br /&gt;
** &amp;lt;code&amp;gt;[Goal_ + Unique_identifier]&amp;lt;/code&amp;gt; followed by the goal description&lt;br /&gt;
* When a goal is completed:&lt;br /&gt;
** close out the goal and return to the parent goal level (change “level” back)&lt;br /&gt;
&lt;br /&gt;
=== How to apply mistakes ===&lt;br /&gt;
&lt;br /&gt;
Whenever there is a mistake:&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== How to apply success markers ===&lt;br /&gt;
&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; only when:&lt;br /&gt;
** The result of a goal is visible, OR&lt;br /&gt;
** The result cannot possibly be visible.&lt;br /&gt;
&lt;br /&gt;
=== General guidance ===&lt;br /&gt;
&lt;br /&gt;
* Annotate as you would prefer sessions to be annotated: be as in-depth as you would like.&lt;br /&gt;
* The goal of annotation is to describe precisely what is happening in the session:&lt;br /&gt;
** what is done,&lt;br /&gt;
** why it is done,&lt;br /&gt;
** and what outcome it leads to.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Technical Specification ==&lt;br /&gt;
&lt;br /&gt;
=== The .session archive ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file is a zip archive with a &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; extension containing (at minimum) the annotated recording and the supporting metadata and audio/transcripts.&lt;br /&gt;
&lt;br /&gt;
=== Required contents ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive must include:&lt;br /&gt;
* &amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; — session metadata (see below)&lt;br /&gt;
* &amp;lt;code&amp;gt;recording.asciinema&amp;lt;/code&amp;gt; — the asciinema recording (annotated)&lt;br /&gt;
* Audio recordings of the interview and any follow-up clarification conversations&lt;br /&gt;
* Transcriptions of those audio files (produced by Whisper), including timestamps&lt;br /&gt;
&lt;br /&gt;
=== session.yaml fields ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; should contain at least:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;: Version number for the format specification (this document) used when creating this &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Optional / planned fields (may be included if supported by the project tooling):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mission&amp;lt;/code&amp;gt; (FUTUREWORK): overarching goal being attempted&lt;br /&gt;
* &amp;lt;code&amp;gt;plan&amp;lt;/code&amp;gt; (FUTUREWORK): intended plan (does not need to match what happened)&lt;br /&gt;
* &amp;lt;code&amp;gt;tests&amp;lt;/code&amp;gt; (FUTUREWORK): an array of “unit test”-like checks indicating success/failure&lt;br /&gt;
** intended to be written in TinTin++&lt;br /&gt;
** loaded after an SSH session has been instantiated&lt;br /&gt;
** includes a time limit for considering the test to have gone wrong&lt;br /&gt;
** examples:&lt;br /&gt;
*** “X command was correctly installed to location Y”&lt;br /&gt;
*** “Running &amp;lt;code&amp;gt;command --version&amp;lt;/code&amp;gt; returns the right version 0.11”&lt;br /&gt;
* &amp;lt;code&amp;gt;system&amp;lt;/code&amp;gt; (optional): command/answer pairs that define the environment&lt;br /&gt;
** examples:&lt;br /&gt;
*** &amp;lt;code&amp;gt;cat /etc/issue.net&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;Ubuntu 22.04 LTS\n&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;ip address&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Core concepts ===&lt;br /&gt;
* Use separate timelines for each goal level (goal / subgoal / sub-subgoal).&lt;br /&gt;
* Add success markers only at moments where a goal outcome is observable (or provably unobservable).&lt;br /&gt;
&lt;br /&gt;
=== Common tags (non-exhaustive) ===&lt;br /&gt;
* Goals: &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt; (plus unique goal identifiers per project convention)&lt;br /&gt;
* Success: &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mistakes: &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secrets: &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
* Discoveries: &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or “Discoveries” tag used by the project)&lt;br /&gt;
* Licensing: &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tools: tool/subtool annotations (in-context and optionally out-of-context)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Complete Worked Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Goal_001] Deploy GNU package &amp;quot;foo&amp;quot; on Debian Stable VM&lt;br /&gt;
  [Subgoal_001a] Install build dependencies&lt;br /&gt;
    tool: apt-get install ...&lt;br /&gt;
    successResult: dependencies installed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001b] Configure build&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    mistake: used wrong configure flag&lt;br /&gt;
    mistakeReason: flag is not supported by this version&lt;br /&gt;
    mistakeResult: configure exits with error, must retry&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    successResult: configure completed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001c] Build and verify&lt;br /&gt;
    tool: make&lt;br /&gt;
    successResult: compilation completed&lt;br /&gt;
    tool: make test&lt;br /&gt;
    successUnknown: tests run but output does not clearly confirm pass/fail (or tests are not available)&lt;br /&gt;
&lt;br /&gt;
  discovery: package requires newer libc than expected → adjust approach / select different target or environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Replace identifiers, tags, and exact phrasing with the conventions supported by the current annotator tool version.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
&lt;br /&gt;
=== Appendix A: Recording environment reminders ===&lt;br /&gt;
* Use a Debian Stable VM for recordings.&lt;br /&gt;
* If Debian Stable lacks required packages, upgrading the VM to unstable is allowed.&lt;br /&gt;
* VMs may be reused across sessions.&lt;br /&gt;
&lt;br /&gt;
=== Appendix B: Keeping everything inside the terminal ===&lt;br /&gt;
* All input/output should be attempted through the terminal session.&lt;br /&gt;
* For web interactions, prefer CLI tools such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
=== Appendix C: Interview and follow-ups ===&lt;br /&gt;
* Record both sides separately for quality.&lt;br /&gt;
* If any follow-up clarification occurs later:&lt;br /&gt;
** record both ends again,&lt;br /&gt;
** include audio and transcripts in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Appendix D: Debian Stable VM details ===&lt;br /&gt;
(See project-specific VM setup instructions for the current cohort/repository; keep this appendix synchronized with those instructions.)&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=64</id>
		<title>AnnotationStandard</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AnnotationStandard&amp;diff=64"/>
		<updated>2026-01-25T21:02:12Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Librecode Annotation Standard =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Document Version:&#039;&#039;&#039; 2.0  &lt;br /&gt;
&#039;&#039;&#039;Last Updated:&#039;&#039;&#039; 2025-10-01  &lt;br /&gt;
&#039;&#039;&#039;Target Audience:&#039;&#039;&#039; Session recorders, annotators, reviewers&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
# [[#Glossary|Glossary]]&lt;br /&gt;
# [[#Overview &amp;amp; Purpose|Overview &amp;amp; Purpose]]&lt;br /&gt;
# [[#The Annotation Process|The Annotation Process]]&lt;br /&gt;
# [[#Annotation Standard|Annotation Standard]]&lt;br /&gt;
# [[#Application Guidelines|Application Guidelines]]&lt;br /&gt;
# [[#Technical Specification|Technical Specification]]&lt;br /&gt;
# [[#Quick Reference|Quick Reference]]&lt;br /&gt;
# [[#Complete Worked Example|Complete Worked Example]]&lt;br /&gt;
# [[#Appendices|Appendices]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Glossary ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Session&#039;&#039;&#039;  &lt;br /&gt;
An asciinema recording of a terminal session, typically showing the deployment or configuration of software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotated Session&#039;&#039;&#039;  &lt;br /&gt;
A session that has structured annotations added to it, conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recording&#039;&#039;&#039;  &lt;br /&gt;
The raw asciinema capture of terminal activity.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation&#039;&#039;&#039;  &lt;br /&gt;
Structured metadata added to a recording that describes what is happening, why, and the outcome.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Timeline&#039;&#039;&#039;  &lt;br /&gt;
A hierarchical structure in the annotator tool where annotations are organized. Different goal levels exist on separate timelines.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Goal Hierarchy&#039;&#039;&#039;  &lt;br /&gt;
The nested structure of goals, subgoals, and sub-subgoals that describe the overall task and its component steps.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotation Tag&#039;&#039;&#039;  &lt;br /&gt;
A specific marker type (e.g., &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;) used to categorize parts of the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person A (Recorder)&#039;&#039;&#039;  &lt;br /&gt;
The individual(s) who created the original terminal session recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Person B (Annotator)&#039;&#039;&#039;  &lt;br /&gt;
The individual who interviews Person A and adds structured annotations to the recording.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.session File&#039;&#039;&#039;  &lt;br /&gt;
A zip file containing the annotated recording, audio transcriptions, and metadata conforming to this specification.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overview &amp;amp; Purpose ==&lt;br /&gt;
&lt;br /&gt;
=== Purpose of this document ===&lt;br /&gt;
&lt;br /&gt;
This document exists to:&lt;br /&gt;
* Provide an annotation process.&lt;br /&gt;
* Provide an annotation standard.&lt;br /&gt;
* Collect guidance for people participating in annotation.&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;annotated session&#039;&#039;&#039; is defined as an asciinema recording, with annotations added to it, conforming to a version of this document.&lt;br /&gt;
&lt;br /&gt;
=== What are Annotated Sessions? ===&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;&#039;annotated session&#039;&#039;&#039; is an asciinema recording of terminal activity (typically software deployment) that has been enriched with structured annotations describing:&lt;br /&gt;
* What actions were performed&lt;br /&gt;
* Why those actions were taken&lt;br /&gt;
* Whether goals were achieved&lt;br /&gt;
* What mistakes occurred and their consequences&lt;br /&gt;
* What discoveries changed the approach&lt;br /&gt;
&lt;br /&gt;
=== Why Create Them? ===&lt;br /&gt;
&lt;br /&gt;
The Librecode project aims to train Large Language Models (LLMs) to understand and work with terminal recordings. Annotated sessions serve as training data, teaching models to:&lt;br /&gt;
* Recognize common deployment patterns&lt;br /&gt;
* Understand error recovery strategies&lt;br /&gt;
* Learn from human problem-solving approaches&lt;br /&gt;
* Eventually perform automatic annotation&lt;br /&gt;
&lt;br /&gt;
Once sufficient manual annotations exist, trained models can automatically annotate new sessions, enabling advanced tooling like automated documentation generation.&lt;br /&gt;
&lt;br /&gt;
=== Document Purpose ===&lt;br /&gt;
&lt;br /&gt;
This document provides:&lt;br /&gt;
# An annotation process for creating annotated sessions&lt;br /&gt;
# An annotation standard defining what to annotate and how&lt;br /&gt;
# Guidelines for annotators to ensure consistency and quality&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== The Annotation Process ==&lt;br /&gt;
&lt;br /&gt;
The process of creating an annotated session involves four distinct phases:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Phase 1: Recording → Phase 2: Interview → Phase 3: Annotation → Phase 4: Submission&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Phase 1: Recording ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Create a terminal recording of meaningful software deployment activity.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A (one or more individuals)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Set up the recording environment:&lt;br /&gt;
#* Use a Debian Stable VM (see Appendix D)&lt;br /&gt;
#* Upgrade to unstable if required packages are missing&lt;br /&gt;
# VMs may be reused from previous deployments, or may be new&lt;br /&gt;
# Start the &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; recording client&lt;br /&gt;
# Attempt to deploy a piece of GNU software&lt;br /&gt;
# Keep all input/output inside the terminal:&lt;br /&gt;
#* Use CLI web tools (&amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, etc.)&lt;br /&gt;
# Stop recording when deployment completes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; &amp;lt;code&amp;gt;.cast&amp;lt;/code&amp;gt; asciinema recording file&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Common Issues:&#039;&#039;&#039;&lt;br /&gt;
* Using GUI tools&lt;br /&gt;
* Stopping recording too early&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 2: Interview ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Ensure the annotator fully understands what was done and why.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person A and Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Record audio of both sides separately&lt;br /&gt;
# Review the recording together (recommended)&lt;br /&gt;
# Explain what was done and why&lt;br /&gt;
# Record follow-up clarification conversations if needed&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039;&lt;br /&gt;
* Audio recordings (both sides)&lt;br /&gt;
* Full understanding of actions and rationale&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Why Separate Audio Recordings?&#039;&#039;&#039;&lt;br /&gt;
* Better transcription quality&lt;br /&gt;
* Clear speaker attribution&lt;br /&gt;
* Higher-quality training data&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Recommended ways to review the recording together:&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;tmate&amp;lt;/code&amp;gt; + asciinema playback can work (during playback, holding &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; fast-forwards)&lt;br /&gt;
* Screen share while watching the recording&lt;br /&gt;
* Screen share while using the annotator tool&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you break into a separate “experimental” session during the meeting:&#039;&#039;&#039;&lt;br /&gt;
* This is allowed and often useful.&lt;br /&gt;
* Record that new session with &amp;lt;code&amp;gt;asciinema&amp;lt;/code&amp;gt; as well, so it can be reviewed and understood by someone who was not present.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 3: Annotation ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Add structured annotations using the annotator tool.  &lt;br /&gt;
&#039;&#039;&#039;Who:&#039;&#039;&#039; Person B&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Load the recording&lt;br /&gt;
# Create timelines for goal hierarchy levels&lt;br /&gt;
# Apply annotations per standard (see [[#Annotation Standard|Annotation Standard]])&lt;br /&gt;
# Review for completeness and consistency&lt;br /&gt;
# Note the spec version used for this annotation (this document version)&lt;br /&gt;
# If clarification is needed, contact Person A:&lt;br /&gt;
#* Record audio of both ends of the clarification conversation&lt;br /&gt;
#* Include the audio (and later transcription) in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; package&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Annotator tool:&#039;&#039;&#039;&lt;br /&gt;
* Use the annotator tool hosted at: &amp;lt;code&amp;gt;https://github.com/arthurwolf/annotator&amp;lt;/code&amp;gt;&lt;br /&gt;
* (If a specific branch is required for a cohort/release, use the branch specified by the project, e.g. &amp;lt;code&amp;gt;from_students&amp;lt;/code&amp;gt; when applicable.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Output:&#039;&#039;&#039; Annotated recording&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Phase 4: Submission ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Objective:&#039;&#039;&#039; Package and submit the session.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Steps:&#039;&#039;&#039;&lt;br /&gt;
# Transcribe audio with Whisper (with timestamps)&lt;br /&gt;
# Create &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive&lt;br /&gt;
# Include required files (see [[#Technical Specification|Technical Specification]])&lt;br /&gt;
# Upload to repository&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Annotation Standard ==&lt;br /&gt;
&lt;br /&gt;
This section defines what to annotate and how.&lt;br /&gt;
&lt;br /&gt;
=== Goal hierarchy and timelines ===&lt;br /&gt;
&lt;br /&gt;
* Goals, subgoals, sub-subgoals (and deeper levels as needed) form a &#039;&#039;&#039;goal hierarchy&#039;&#039;&#039;.&lt;br /&gt;
* Ideally, every part of the session should belong to a goal.&lt;br /&gt;
* Subgoals should represent meaningful “chunks” of work contributing to a parent goal.&lt;br /&gt;
* Goals, subgoals, and sub-(sub…) goals should exist as &#039;&#039;&#039;separate timelines&#039;&#039;&#039; in the annotator tool:&lt;br /&gt;
** Think: one “Goal” timeline spanning the whole file,&lt;br /&gt;
** Subgoal timelines covering sections that represent large steps,&lt;br /&gt;
** Deeper timelines for finer-grained structure as needed.&lt;br /&gt;
&lt;br /&gt;
=== Success markers ===&lt;br /&gt;
&lt;br /&gt;
Use success markers to capture whether a goal (or subgoal) was achieved at the moment where the result is observable.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt; — the goal was achieved (success is visible in the recording output)&lt;br /&gt;
* &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt; — the goal failed (failure is visible)&lt;br /&gt;
* &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; — success cannot be determined from the recording (or cannot possibly be visible)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;When to apply success markers:&#039;&#039;&#039;&lt;br /&gt;
* Apply success markers only when the success/failure of a command corresponds to the attempted end of a goal.&lt;br /&gt;
* Example:&lt;br /&gt;
** If a goal is “get my program to compile”, then the output of &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; (where compilation occurs) is the target moment.&lt;br /&gt;
* For activities where the result cannot be observed (e.g., some parts of OS installs), &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; is acceptable.&lt;br /&gt;
&lt;br /&gt;
=== Tools and subtools (commands and interfaces) ===&lt;br /&gt;
&lt;br /&gt;
* Commands can be annotated as tools/subtools.&lt;br /&gt;
* Provide:&lt;br /&gt;
** An &#039;&#039;&#039;in-context&#039;&#039;&#039; description (considering the current goal and what has happened so far)&lt;br /&gt;
** Optionally, an &#039;&#039;&#039;out-of-context&#039;&#039;&#039; description (what the command generally does)&lt;br /&gt;
&lt;br /&gt;
This includes screen-based interactions when they are part of the workflow (if the annotator supports representing them).&lt;br /&gt;
&lt;br /&gt;
=== Mistakes ===&lt;br /&gt;
&lt;br /&gt;
Every mistake down to the typo should be tagged, including why it is a mistake and the repercussions.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt; — the incorrect action or decision&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt; — why it was wrong&lt;br /&gt;
* &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt; — what happened because of it (error message, time lost, wrong path taken, etc.)&lt;br /&gt;
&lt;br /&gt;
=== Secrets and sensitive data ===&lt;br /&gt;
&lt;br /&gt;
Use specific tags for secrets and secret-like flows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Annotate secret handling carefully, and prefer describing the flow rather than reproducing secret material.&lt;br /&gt;
&lt;br /&gt;
=== Discoveries ===&lt;br /&gt;
&lt;br /&gt;
Discoveries are things learned during the session that change the plan/goals/approach.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or project’s chosen “Discoveries” tag) — a new fact that changes what happens next&lt;br /&gt;
* Apply when the discovery causes a change in goals, subgoals, or strategy.&lt;br /&gt;
&lt;br /&gt;
=== Licensing and legally significant text ===&lt;br /&gt;
&lt;br /&gt;
If you reproduce a “legally significant” portion of a licensed work (see GNU guidance on “Legally Significant”), list the license in your annotation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When in doubt, prefer summarizing instead of reproducing large chunks of licensed text.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Application Guidelines ==&lt;br /&gt;
&lt;br /&gt;
=== How to apply goal markers ===&lt;br /&gt;
&lt;br /&gt;
* When starting a goal, add a unique goal identifier (format guideline):&lt;br /&gt;
** &amp;lt;code&amp;gt;[Goal_ + Unique_identifier]&amp;lt;/code&amp;gt; followed by the goal description&lt;br /&gt;
* When a goal is completed:&lt;br /&gt;
** close out the goal and return to the parent goal level (change “level” back)&lt;br /&gt;
&lt;br /&gt;
=== How to apply mistakes ===&lt;br /&gt;
&lt;br /&gt;
Whenever there is a mistake:&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== How to apply success markers ===&lt;br /&gt;
&lt;br /&gt;
* Apply &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt; only when:&lt;br /&gt;
** The result of a goal is visible, OR&lt;br /&gt;
** The result cannot possibly be visible.&lt;br /&gt;
&lt;br /&gt;
=== General guidance ===&lt;br /&gt;
&lt;br /&gt;
* Annotate as you would prefer sessions to be annotated: be as in-depth as you would like.&lt;br /&gt;
* The goal of annotation is to describe precisely what is happening in the session:&lt;br /&gt;
** what is done,&lt;br /&gt;
** why it is done,&lt;br /&gt;
** and what outcome it leads to.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Technical Specification ==&lt;br /&gt;
&lt;br /&gt;
=== The .session archive ===&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file is a zip archive with a &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; extension containing (at minimum) the annotated recording and the supporting metadata and audio/transcripts.&lt;br /&gt;
&lt;br /&gt;
=== Required contents ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; archive must include:&lt;br /&gt;
* &amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; — session metadata (see below)&lt;br /&gt;
* &amp;lt;code&amp;gt;recording.asciinema&amp;lt;/code&amp;gt; — the asciinema recording (annotated)&lt;br /&gt;
* Audio recordings of the interview and any follow-up clarification conversations&lt;br /&gt;
* Transcriptions of those audio files (produced by Whisper), including timestamps&lt;br /&gt;
&lt;br /&gt;
=== session.yaml fields ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;session.yaml&amp;lt;/code&amp;gt; should contain at least:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt;: Version number for the format specification (this document) used when creating this &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Optional / planned fields (may be included if supported by the project tooling):&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mission&amp;lt;/code&amp;gt; (FUTUREWORK): overarching goal being attempted&lt;br /&gt;
* &amp;lt;code&amp;gt;plan&amp;lt;/code&amp;gt; (FUTUREWORK): intended plan (does not need to match what happened)&lt;br /&gt;
* &amp;lt;code&amp;gt;tests&amp;lt;/code&amp;gt; (FUTUREWORK): an array of “unit test”-like checks indicating success/failure&lt;br /&gt;
** intended to be written in TinTin++&lt;br /&gt;
** loaded after an SSH session has been instantiated&lt;br /&gt;
** includes a time limit for considering the test to have gone wrong&lt;br /&gt;
** examples:&lt;br /&gt;
*** “X command was correctly installed to location Y”&lt;br /&gt;
*** “Running &amp;lt;code&amp;gt;command --version&amp;lt;/code&amp;gt; returns the right version 0.11”&lt;br /&gt;
* &amp;lt;code&amp;gt;system&amp;lt;/code&amp;gt; (optional): command/answer pairs that define the environment&lt;br /&gt;
** examples:&lt;br /&gt;
*** &amp;lt;code&amp;gt;cat /etc/issue.net&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;Ubuntu 22.04 LTS\n&amp;lt;/code&amp;gt;&lt;br /&gt;
*** &amp;lt;code&amp;gt;ip address&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Reference ==&lt;br /&gt;
&lt;br /&gt;
=== Core concepts ===&lt;br /&gt;
* Use separate timelines for each goal level (goal / subgoal / sub-subgoal).&lt;br /&gt;
* Add success markers only at moments where a goal outcome is observable (or provably unobservable).&lt;br /&gt;
&lt;br /&gt;
=== Common tags (non-exhaustive) ===&lt;br /&gt;
* Goals: &amp;lt;code&amp;gt;goal&amp;lt;/code&amp;gt; (plus unique goal identifiers per project convention)&lt;br /&gt;
* Success: &amp;lt;code&amp;gt;successResult&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successFailure&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;successUnknown&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mistakes: &amp;lt;code&amp;gt;mistake&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeReason&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mistakeResult&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secrets: &amp;lt;code&amp;gt;passwordPrompt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;passwordAgain&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;&lt;br /&gt;
* Discoveries: &amp;lt;code&amp;gt;discovery&amp;lt;/code&amp;gt; (or “Discoveries” tag used by the project)&lt;br /&gt;
* Licensing: &amp;lt;code&amp;gt;license&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;copyright&amp;lt;/code&amp;gt;&lt;br /&gt;
* Tools: tool/subtool annotations (in-context and optionally out-of-context)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Complete Worked Example ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Goal_001] Deploy GNU package &amp;quot;foo&amp;quot; on Debian Stable VM&lt;br /&gt;
  [Subgoal_001a] Install build dependencies&lt;br /&gt;
    tool: apt-get install ...&lt;br /&gt;
    successResult: dependencies installed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001b] Configure build&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    mistake: used wrong configure flag&lt;br /&gt;
    mistakeReason: flag is not supported by this version&lt;br /&gt;
    mistakeResult: configure exits with error, must retry&lt;br /&gt;
    tool: ./configure --prefix=/usr/local&lt;br /&gt;
    successResult: configure completed&lt;br /&gt;
&lt;br /&gt;
  [Subgoal_001c] Build and verify&lt;br /&gt;
    tool: make&lt;br /&gt;
    successResult: compilation completed&lt;br /&gt;
    tool: make test&lt;br /&gt;
    successUnknown: tests run but output does not clearly confirm pass/fail (or tests are not available)&lt;br /&gt;
&lt;br /&gt;
  discovery: package requires newer libc than expected → adjust approach / select different target or environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Replace identifiers, tags, and exact phrasing with the conventions supported by the current annotator tool version.)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Appendices ==&lt;br /&gt;
&lt;br /&gt;
=== Appendix A: Recording environment reminders ===&lt;br /&gt;
* Use a Debian Stable VM for recordings.&lt;br /&gt;
* If Debian Stable lacks required packages, upgrading the VM to unstable is allowed.&lt;br /&gt;
* VMs may be reused across sessions.&lt;br /&gt;
&lt;br /&gt;
=== Appendix B: Keeping everything inside the terminal ===&lt;br /&gt;
* All input/output should be attempted through the terminal session.&lt;br /&gt;
* For web interactions, prefer CLI tools such as:&lt;br /&gt;
** &amp;lt;code&amp;gt;lynx&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;wget&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
=== Appendix C: Interview and follow-ups ===&lt;br /&gt;
* Record both sides separately for quality.&lt;br /&gt;
* If any follow-up clarification occurs later:&lt;br /&gt;
** record both ends again,&lt;br /&gt;
** include audio and transcripts in the &amp;lt;code&amp;gt;.session&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Appendix D: Debian Stable VM details ===&lt;br /&gt;
(See project-specific VM setup instructions for the current cohort/repository; keep this appendix synchronized with those instructions.)&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=63</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=63"/>
		<updated>2026-01-25T20:57:11Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the CopyLeft Artificial Intelligence wiki!&lt;br /&gt;
&lt;br /&gt;
Here, you will find documents, howtos, and notes about our efforts to create CopyLeft respecting Free Software Artificial Intelligence systems.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== AutoDoc ===&lt;br /&gt;
&lt;br /&gt;
The [[AutoDoc]] project aims at converting Asciinema terminal recordings into structured events, annotations, and derived documentation artifacts using LLMs.&lt;br /&gt;
&lt;br /&gt;
* [[AnnotationStandard]]: Standard for the annotation file format used to annotate `asciinema` sessions.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
We have many hackers working in many locations. Here is where we describe our sites, so we can share infrastructure:&lt;br /&gt;
&lt;br /&gt;
* [[FAIKVM.COM]]&lt;br /&gt;
* [[LIBRECODE.EU]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Like all projects, we have hardware dependencies. We try to document them, and their behaviors, so that our distributed team can reproduce one another&#039;s environments simply.&lt;br /&gt;
&lt;br /&gt;
Our infrastructure includes, but is not limited to the following devices:&lt;br /&gt;
* [[HP DL360 Gen9]]&lt;br /&gt;
* [[IGEL M350C]]&lt;br /&gt;
* [[ASRock H81m-HDS (v1.0)]]&lt;br /&gt;
* [[DLink DWR-978]]&lt;br /&gt;
&lt;br /&gt;
== FAIKVM ==&lt;br /&gt;
Our infrastructure stack is a combination of FAI, KVM, and a pile of shell scripts.&lt;br /&gt;
&lt;br /&gt;
This infrastructure includes, but is not limited to the following VM types:&lt;br /&gt;
* [[WikiServer]]&lt;br /&gt;
* [[KanServer]]&lt;br /&gt;
* [[FAIServer]]&lt;br /&gt;
* [[QEMUHost]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=56</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=56"/>
		<updated>2026-01-12T00:26:09Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Postgres 17 + DocumentDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add pgsql -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit /etc/postgresql/17/main/pg_hba.conf&lt;br /&gt;
* replace &#039;&#039;&#039;scram-sha-256&#039;&#039; with &#039;&#039;&#039;trust&#039;&#039;&#039; on the &#039;&#039;&#039;host&#039;&#039; lines for &#039;&#039;&#039;127.0.0.1/32&#039;&#039;&#039; and &#039;&#039;&#039;::1/128&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 rm /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferretdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=55</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=55"/>
		<updated>2026-01-12T00:14:51Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* FerretDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add pgsql -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 rm /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferretdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=54</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=54"/>
		<updated>2026-01-12T00:13:43Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Postgres 17 + DocumentDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add pgsql -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 rm /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=51</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=51"/>
		<updated>2026-01-11T23:00:26Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* WeKan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 rm /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=50</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=50"/>
		<updated>2026-01-11T22:59:32Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Launching WeKan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 rm /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:$HOME/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=49</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=49"/>
		<updated>2026-01-11T22:57:37Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* FerretDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 rm /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=48</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=48"/>
		<updated>2026-01-11T22:56:40Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Initializing the Database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 psql&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=47</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=47"/>
		<updated>2026-01-11T22:04:46Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Initializing the Database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=46</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=46"/>
		<updated>2026-01-11T22:03:24Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* FerretDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
edit your /etc/systemd/system/ferritdb.service file&lt;br /&gt;
* Add your username/password pair to the following line:&lt;br /&gt;
&#039;&#039;&#039;Environment=&amp;quot;FERRETDB_POSTGRESQL_URL=postgres://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:5432/postgres&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=45</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=45"/>
		<updated>2026-01-11T21:08:23Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Initializing the Database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_catalog to ferret;&lt;br /&gt;
 GRANT INSERT ON TABLE documentdb_api_catalog.collections to ferret;&lt;br /&gt;
 GRANT ALL ON SCHEMA documentdb_data to ferret;&lt;br /&gt;
 GRANT documentdb_admin_role to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=44</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=44"/>
		<updated>2026-01-11T20:00:22Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Initializing the Database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 CREATE EXTENSION documentdb CASCADE;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_core to ferret;&lt;br /&gt;
 GRANT USAGE ON SCHEMA documentdb_api_internal to ferret;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=43</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=43"/>
		<updated>2026-01-11T19:04:27Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Postgres 17 + DocumentDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
* set &#039;&#039;&#039;shared_preload_libraries = &#039;pg_cron, pg_documentdb, pg_documentdb_core&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=42</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=42"/>
		<updated>2026-01-11T17:33:56Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Postgres 17 + DocumentDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
 * set &#039;&#039;&#039;shared_preload_libraries = &#039;documentdb&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=41</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=41"/>
		<updated>2026-01-11T17:33:37Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* = Initializing the Database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ===&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=40</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=40"/>
		<updated>2026-01-11T17:33:02Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* FerretDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
=== Initializing the Database ==&lt;br /&gt;
 su -&lt;br /&gt;
 su - postgres&lt;br /&gt;
 CREATE ROLE ferret WITH PASSWORD &#039;&amp;lt;PASSWORD_GOES_HERE&amp;gt;&#039;;&lt;br /&gt;
 CREATE DATABASE ferretdb;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON DATABASE ferretdb TO ferret;&lt;br /&gt;
 ALTER ROLE ferret WITH LOGIN;&lt;br /&gt;
 &lt;br /&gt;
Edit /etc/postgresql/17/main/postgresql.conf&lt;br /&gt;
 * set &#039;&#039;&#039;shared_preload_libraries = &#039;documentdb&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=39</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=39"/>
		<updated>2026-01-11T15:33:34Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* FerritDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
=== FerretDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo systemctl enable ferretdb.service&lt;br /&gt;
 sudo service ferretdb start&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=38</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=38"/>
		<updated>2026-01-11T14:13:35Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* FerritDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
=== FerritDB ===&lt;br /&gt;
 curl -L https://github.com/FerretDB/FerretDB/releases/download/v2.7.0/ferretdb-amd64-linux.deb -o /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
 sudo dpkg -i /tmp/ferretdb-amd64-linux.deb&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=37</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=37"/>
		<updated>2026-01-11T14:12:49Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Postgres 17 + DocumentDB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
 sudo bash -c &#039;curl -fsSL https://repo.pigsty.io/pig | bash&#039;&lt;br /&gt;
 pig repo add all -u&lt;br /&gt;
 pig ext install pg17&lt;br /&gt;
 pig ext install documentdb&lt;br /&gt;
&lt;br /&gt;
=== FerritDB ===&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=36</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=36"/>
		<updated>2026-01-11T14:03:15Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Post Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
=== WeKan ===&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
=== Postgres 17 + DocumentDB ===&lt;br /&gt;
&lt;br /&gt;
=== FerritDB ===&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=35</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=35"/>
		<updated>2026-01-11T13:51:04Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
== Launching WeKan ==&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 cd ~/wekan&lt;br /&gt;
 MONGO_URL=mongodb://ferret:&amp;lt;DB_PASSWORD_GOES_HERE&amp;gt;@127.0.0.1:27017/wekan WRITABLE_PATH=.. WITH_API=true RICHER_CARD_COMMENT_EDITOR=false ROOT_URL=https://kan.faikvm.com meteor run --exclude-archs web.browser.legacy,web.cordova --port 8080 2&amp;gt;&amp;amp;1 | tee ../wekan-log.`date +%s`.txt&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=34</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=34"/>
		<updated>2026-01-11T13:43:46Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at npm installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=33</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=33"/>
		<updated>2026-01-11T13:39:52Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at installing meteor, with 384 megs.&lt;br /&gt;
# Machine must have at least 4 gigs of ram. Crashes at meteor build with 3 gigs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=32</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=32"/>
		<updated>2026-01-11T13:17:33Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Post Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
 export PATH=$PATH:/home/demo/.meteor&lt;br /&gt;
 meteor npm install production&lt;br /&gt;
 meteor build .build --directory --platforms=web.browser&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at installing meteor, with 384 megs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=31</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=31"/>
		<updated>2026-01-11T13:11:33Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
# Machine must have at least 3 gigs of ram. Crashes at installing meteor, with 384 megs.&lt;br /&gt;
# be ready to read rebuild-wekan.sh if you want to actually get it running.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=30</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=30"/>
		<updated>2026-01-11T13:04:02Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
Machine must have at least 3 gigs of ram.&lt;br /&gt;
Crashes at installing meteor, with 384 megs.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=29</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=29"/>
		<updated>2026-01-11T12:49:32Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: /* Post Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;br /&gt;
 sudo npm install -g n&lt;br /&gt;
 export N_NODE_MIRROR=https://github.com/wekan/node-v14-esm/releases/download&lt;br /&gt;
 sudo -E n 14.21.4&lt;br /&gt;
 sudo npm -g install @mapbox/node-pre-gyp&lt;br /&gt;
 sudo npm -g install meteor@2.14 --unsafe-perm&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=28</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=28"/>
		<updated>2026-01-11T11:54:43Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: add missing sudo, apt update.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 sudo apt update&lt;br /&gt;
 sudo apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=27</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=27"/>
		<updated>2026-01-11T11:53:29Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: fix formatting; extend.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/wekan/wekan.git&lt;br /&gt;
 cd wekan&lt;br /&gt;
 git checkout v8.17&lt;br /&gt;
 apt install -y build-essential gcc g++ make git curl wget p7zip-full zip unzip unp npm p7zip-full&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=26</id>
		<title>KanServer</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=KanServer&amp;diff=26"/>
		<updated>2026-01-11T11:28:59Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: create page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Post Install ==&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
git clone https://github.com/wekan/wekan.git&lt;br /&gt;
cd wekan&lt;br /&gt;
git checkout v8.17&lt;br /&gt;
```&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=25</id>
		<title>AutoDoc</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=25"/>
		<updated>2026-01-07T20:57:49Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AutoDoc is the project we have been working on, along with groups of students.&lt;br /&gt;
&lt;br /&gt;
The AutoDoc Project&#039;s goal is to use Free Software respecting AI systems to assist developers and operators with understanding their work, and allow them to lower the barrier to transfer that understanding. AutoDocs implements a terminal interface, providing summarization and error highlighting via LLMs, and allowing for an export of knowledge from this session, in Markdown or Dockerfile format.&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
&lt;br /&gt;
# Student Groups&lt;br /&gt;
List of students that worked on AutoDoc: [[Student_Groups]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Wiki:About&amp;diff=24</id>
		<title>Wiki:About</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Wiki:About&amp;diff=24"/>
		<updated>2026-01-04T16:38:04Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: Created page with &amp;quot;This wiki documents the efforts of the members of the CopyLeft AI Federation.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This wiki documents the efforts of the members of the CopyLeft AI Federation.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=23</id>
		<title>AutoDoc</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=23"/>
		<updated>2026-01-02T19:34:19Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the &#039;big&#039; project we&#039;re working on.&lt;br /&gt;
&lt;br /&gt;
It involves a web interface, multiple LLMs, and a database of annotated asciinema sessions.&lt;br /&gt;
&lt;br /&gt;
List of students that worked on AutoDoc: [[Student_Groups]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=22</id>
		<title>AutoDoc</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=22"/>
		<updated>2026-01-02T19:23:38Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of students that worked on AutoDoc: [[Student_Groups]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=21</id>
		<title>AutoDoc</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=21"/>
		<updated>2026-01-02T19:23:20Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List of student projects that worked on AutoDoc: [[Student_Groups]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=20</id>
		<title>AutoDoc</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=AutoDoc&amp;diff=20"/>
		<updated>2026-01-02T19:22:41Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: Created page with &amp;quot; List of student projects that worked on AutoDoc: Student_Groups&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
List of student projects that worked on AutoDoc: [[Student_Groups]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=19</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=19"/>
		<updated>2026-01-02T19:22:33Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: create an anchor page for AutoDoc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the CopyLeft Artificial Intelligence wiki!&lt;br /&gt;
&lt;br /&gt;
Here, you will find documents, howtos, and notes about our efforts to create CopyLeft respecting Free Software Artificial Intelligence systems.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== AutoDoc ===&lt;br /&gt;
&lt;br /&gt;
The [[AutoDoc]] project aims at converting Asciinema terminal recordings into structured events, annotations, and derived documentation artifacts using LLMs.&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
We have many hackers working in many locations. Here is where we describe our sites, so we can share infrastructure:&lt;br /&gt;
&lt;br /&gt;
* [[FAIKVM.COM]]&lt;br /&gt;
* [[LIBRECODE.EU]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Like all projects, we have hardware dependencies. We try to document them, and their behaviors, so that our distributed team can reproduce one another&#039;s environments simply.&lt;br /&gt;
&lt;br /&gt;
Our infrastructure includes, but is not limited to the following devices:&lt;br /&gt;
* [[IGEL M350C]]&lt;br /&gt;
* [[ASRock H81m-HDS (v1.0)]]&lt;br /&gt;
* [[DLink DWR-978]]&lt;br /&gt;
&lt;br /&gt;
== FAIKVM ==&lt;br /&gt;
Our infrastructure stack is a combination of FAI, KVM, and a pile of shell scripts.&lt;br /&gt;
&lt;br /&gt;
This infrastructure includes, but is not limited to the following VM types:&lt;br /&gt;
* [[WikiServer]]&lt;br /&gt;
* [[KanServer]]&lt;br /&gt;
* [[FAIServer]]&lt;br /&gt;
* [[QEMUHost]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=IGEL_M350C&amp;diff=18</id>
		<title>IGEL M350C</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=IGEL_M350C&amp;diff=18"/>
		<updated>2026-01-02T19:18:55Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the daily driver for many of us.&lt;br /&gt;
&lt;br /&gt;
It is capable of accepting 64GB of memory (2x32GB sticks).&lt;br /&gt;
&lt;br /&gt;
It&#039;s supplied by 12 volts, and will draw less than 5 amps.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=ASRock_H81m-HDS_(v1.0)&amp;diff=17</id>
		<title>ASRock H81m-HDS (v1.0)</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=ASRock_H81m-HDS_(v1.0)&amp;diff=17"/>
		<updated>2025-12-30T00:59:40Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: add a note on how to identify the two different versions of the board.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the mainboard used to run our Xeon PHIs. We run coreboot on them, for proper 64 bit bios memory addressing support. If you&#039;re purchasing these, note the position of the HDMI port in listings: one that stands away from the board is v2.0, and one that lays flat on the board is v1.0. We are only using boards of the latter type.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=ASRock_H81m-HDS_(v1.0)&amp;diff=16</id>
		<title>ASRock H81m-HDS (v1.0)</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=ASRock_H81m-HDS_(v1.0)&amp;diff=16"/>
		<updated>2025-12-28T13:56:19Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: Created page with &amp;quot;This is the mainboard used to run our Xeon PHIs. We run coreboot on them, for proper 64 bit bios memory addressing support.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the mainboard used to run our Xeon PHIs. We run coreboot on them, for proper 64 bit bios memory addressing support.&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
	<entry>
		<id>https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=15</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.faikvm.com/mediawiki/index.php?title=Main_Page&amp;diff=15"/>
		<updated>2025-12-28T13:55:19Z</updated>

		<summary type="html">&lt;p&gt;JuliaLongtin: reorganize, add kanserver.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the CopyLeft Artificial Intelligence wiki!&lt;br /&gt;
&lt;br /&gt;
Here, you will find documents, howtos, and notes about our efforts to create CopyLeft respecting Free Software Artificial Intelligence systems.&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== Autodoc ===&lt;br /&gt;
&lt;br /&gt;
The Autodoc project aims at converting asciinema terminal recordings into structured events, annotations, and derived documentation artifacts using LLMs.&lt;br /&gt;
&lt;br /&gt;
List of student projects that worked on the Autodoc project: [[Student_Groups]]&lt;br /&gt;
&lt;br /&gt;
== Locations ==&lt;br /&gt;
We have many hackers working in many locations. Here is where we describe our sites, so we can share infrastructure:&lt;br /&gt;
&lt;br /&gt;
* [[FAIKVM.COM]]&lt;br /&gt;
* [[LIBRECODE.EU]]&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
Like all projects, we have hardware dependencies. We try to document them, and their behaviors, so that our distributed team can reproduce one another&#039;s environments simply.&lt;br /&gt;
&lt;br /&gt;
Our infrastructure includes, but is not limited to the following devices:&lt;br /&gt;
* [[IGEL M350C]]&lt;br /&gt;
* [[ASRock H81m-HDS (v1.0)]]&lt;br /&gt;
* [[DLink DWR-978]]&lt;br /&gt;
&lt;br /&gt;
== FAIKVM ==&lt;br /&gt;
Our infrastructure stack is a combination of FAI, KVM, and a pile of shell scripts.&lt;br /&gt;
&lt;br /&gt;
This infrastructure includes, but is not limited to the following VM types:&lt;br /&gt;
* [[WikiServer]]&lt;br /&gt;
* [[KanServer]]&lt;br /&gt;
* [[FAIServer]]&lt;br /&gt;
* [[QEMUHost]]&lt;/div&gt;</summary>
		<author><name>JuliaLongtin</name></author>
	</entry>
</feed>