<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>MediawikiCIT  - Recent changes [en]</title>
		<link>https://mediawiki.comfac.net/index.php/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.45.1</generator>
		<lastBuildDate>Tue, 04 Aug 2026 15:00:29 GMT</lastBuildDate>
		<item>
			<title>Main Page</title>
			<link>https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=271&amp;oldid=267</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=271&amp;oldid=267</guid>
			<description>&lt;p&gt;Add New Articles feed (10 most recent, pruned) + auto Newest Pages section, per the hub-and-spoke publishing protocol&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 06:05, 2 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-multi&quot; lang=&quot;en&quot;&gt;(One intermediate revision by the same user not shown)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Welcome to the &amp;#039;&amp;#039;&amp;#039;Comfac IT Knowledge Base&amp;#039;&amp;#039;&amp;#039;. Use the sections below to find guides, SOPs, and references organized by topic.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Welcome to the &amp;#039;&amp;#039;&amp;#039;Comfac IT Knowledge Base&amp;#039;&amp;#039;&amp;#039;. Use the sections below to find guides, SOPs, and references organized by topic.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== New Articles ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Recent additions to this wiki, newest first — each is also filed in its permanent topic section below. &#039;&#039;&#039;Keep this list to the 10 most recent&#039;&#039;&#039; and prune as new pages are added; nothing is deleted, entries just roll off the feed.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-08-02 — &#039;&#039;&#039;[[Hugging Face Practical Guide 260802]]&#039;&#039;&#039; — Spaces, local app builds, the Model Hub / dataset viewer, and the enterprise compute tier; the route from stock models to tailored ones and to training on our own data — &#039;&#039;Filed under: AI &amp;amp; Machine Learning&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-08-01 — &#039;&#039;&#039;[[Audio Learning]]&#039;&#039;&#039; — Converting research and study material into scripts written to be listened to rather than read; shared Comfac tool — &#039;&#039;Filed under: Tools &amp;amp; Productivity&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-07-31 — &#039;&#039;&#039;[[Resume CV Renamer Pipeline]]&#039;&#039;&#039; — CV intake → OCR / vision-OCR → AI field extraction → date-stamped rename + VCF export — &#039;&#039;Filed under: Tools &amp;amp; Productivity&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-07-15 — &#039;&#039;&#039;[[De-Risk: Sovereign Training Data v0.1]]&#039;&#039;&#039; — Frontier-Token Quarantine and the ToS-clean path to owned model weights, prompted by the June 2026 Fable 5 export-control suspension — &#039;&#039;Filed under: AI &amp;amp; Machine Learning&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-07-15 — &#039;&#039;&#039;[[Directed Execution: Token-Efficient Agent Development Process]]&#039;&#039;&#039; — Director/Executor/Checker loop and skill distillation for token-efficient agent development — &#039;&#039;Filed under: AI &amp;amp; Machine Learning&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-07-11 — &#039;&#039;&#039;[[Tutorial: Exposing a Dockerized Web App via NPM Direct DB Config]]&#039;&#039;&#039; — Expose a Dockerized web app by editing Nginx Proxy Manager&#039;s database directly — &#039;&#039;Filed under: System Administration &amp;amp; Self-Hosting&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-05-02 — &#039;&#039;&#039;[[Organizing Coder Terminals]]&#039;&#039;&#039; — Tmux + dynamic titles for managing multiple AI agent terminals — &#039;&#039;Filed under: System Administration &amp;amp; Self-Hosting&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-04-28 — &#039;&#039;&#039;[[Forgejo Pages]]&#039;&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-04-24 — &#039;&#039;&#039;[[Buzz Transcription]]&#039;&#039;&#039; — Offline audio/meeting transcription via Whisper (whisper.cpp), Flatpak + Vulkan GPU acceleration — &#039;&#039;Filed under: Tools &amp;amp; Productivity&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* 2026-04-23 — &#039;&#039;&#039;[[Training: Setting Up a Firewall for Yourself]]&#039;&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Newest Pages (auto) ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The 10 most recently created pages — maintains itself.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Special:NewPages/10}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== ERPNext / Frappe ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== ERPNext / Frappe ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l60&quot;&gt;Line 60:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 81:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Directed Execution: Token-Efficient Agent Development Process]] — Director/Executor/Checker loop and skill distillation for token-efficient agent development (v0.1, 2026-07-15)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Directed Execution: Token-Efficient Agent Development Process]] — Director/Executor/Checker loop and skill distillation for token-efficient agent development (v0.1, 2026-07-15)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[De-Risk: Sovereign Training Data v0.1]] — Frontier-Token Quarantine and the ToS-clean path to owned model weights, prompted by the June 2026 Fable 5 export-control suspension (v0.1, 2026-07-15)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[De-Risk: Sovereign Training Data v0.1]] — Frontier-Token Quarantine and the ToS-clean path to owned model weights, prompted by the June 2026 Fable 5 export-control suspension (v0.1, 2026-07-15)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Hugging Face Practical Guide 260802]] — Spaces, local app builds, the Model Hub / dataset viewer, and the enterprise compute tier; the route from stock models to tailored ones and to training on our own data (2026-08-02)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key database:diff:1.41:old-267:rev-271:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Sun, 02 Aug 2026 06:05:55 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Main_Page</comments>
		</item>
		<item>
			<title>Hugging Face Practical Guide 260802</title>
			<link>https://mediawiki.comfac.net/index.php?title=Hugging_Face_Practical_Guide_260802&amp;diff=269&amp;oldid=0</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Hugging_Face_Practical_Guide_260802&amp;diff=269&amp;oldid=0</guid>
			<description>&lt;p&gt;New article: Hugging Face practical guide (Spaces, local builds, Model Hub/datasets, enterprise + hf jobs) - lae/HF backlog&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Hugging Face — Practical Guide =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Compiled:&amp;#039;&amp;#039;&amp;#039; 2026-08-02 · &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; Living page — open for deeper research&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Why it is here:&amp;#039;&amp;#039;&amp;#039; Hugging Face is currently used at Comfac as a download endpoint for stock model files. It is four things, and the other three are the ones we under-use.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal behind this page: access to free open-source models that are &amp;#039;&amp;#039;&amp;#039;better than the stock ones&amp;#039;&amp;#039;&amp;#039; and more tailored to a specific job, the &amp;#039;&amp;#039;&amp;#039;harnesses&amp;#039;&amp;#039;&amp;#039; built around them, and the &amp;#039;&amp;#039;&amp;#039;training resources&amp;#039;&amp;#039;&amp;#039; that take a corpus of a few hundred owned data points and work it up toward thousands.&lt;br /&gt;
&lt;br /&gt;
That last one is the unclosed loop in [[De-Risk: Sovereign Training Data v0.1]] — we have clean, owned process knowledge and no mechanism yet for turning it into &amp;#039;&amp;#039;&amp;#039;weights we own&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Each section below ends with &amp;#039;&amp;#039;&amp;#039;search keywords&amp;#039;&amp;#039;&amp;#039; for going deeper on that one bucket.&lt;br /&gt;
&lt;br /&gt;
== Source videos ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; this wiki does not have the &amp;lt;code&amp;gt;EmbedVideo&amp;lt;/code&amp;gt; extension installed (verified 2026-08-02 via &amp;lt;code&amp;gt;api.php ... siprop=extensions&amp;lt;/code&amp;gt;), so videos are listed as preview cards rather than embedded players. The [https://wiki.gi7b.org/index.php/Hugging_Face_Practical_Guide_260802 gwiki copy of this page] has EmbedVideo and shows them inline. Installing the extension here is an administrator action.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:100%;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:34%;&amp;quot; | Video !! What it covers !! Use it for&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[https://www.youtube.com/watch?v=3kRB2TXewus What Is Hugging Face and How To Use It]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| The general tour — Spaces, the Model Hub, the Datasets section, and how they relate.&lt;br /&gt;
| Sections 1–3 below. Start here if Hugging Face has only ever been a download link.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;[https://www.youtube.com/watch?v=wUzfRBi9wZ0 The Hugging Face Hub for Enterprise &amp;amp; Academia]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Private workspaces, SSO, access control, separated compute/storage billing, SSH onto Spaces hardware, and remote training with &amp;lt;code&amp;gt;hf jobs&amp;lt;/code&amp;gt;.&lt;br /&gt;
| Section 4. This is the one that matters for training on our own data.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 1. Exploring and using pre-built AI (Spaces) ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spaces&amp;#039;&amp;#039;&amp;#039; are ready-to-use, browser-based applications built by the AI community — image and video generators, voice synthesis, transcription, live demos of new papers. All runnable without writing code.&lt;br /&gt;
&lt;br /&gt;
If a Space is useful, click &amp;#039;&amp;#039;&amp;#039;Duplicate Space&amp;#039;&amp;#039;&amp;#039;. That forks it into your own account as your own copy, public or private, on hardware you select.&lt;br /&gt;
&lt;br /&gt;
Two things worth internalising:&lt;br /&gt;
&lt;br /&gt;
* A Space is a &amp;#039;&amp;#039;&amp;#039;real repository&amp;#039;&amp;#039;&amp;#039;, not a demo sandbox. Duplicating gives you the source.&lt;br /&gt;
* Most Spaces are &amp;#039;&amp;#039;&amp;#039;Gradio&amp;#039;&amp;#039;&amp;#039; apps. Learn Gradio once and the whole catalogue becomes editable.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Search keywords:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;Hugging Face Spaces tutorial&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;How to build and deploy Gradio apps on Hugging Face&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Duplicating Hugging Face Spaces&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 2. Building custom apps locally ==&lt;br /&gt;
&lt;br /&gt;
Because Spaces are open source, the code comes to your machine. Clone the repository, open it in an AI-assisted IDE, run it locally, and connect your own API keys instead of the demo&amp;#039;s. From there the IDE can help you change colours, fonts, or actual behaviour.&lt;br /&gt;
&lt;br /&gt;
This is the cheapest route to &amp;#039;&amp;#039;&amp;#039;a harness we control&amp;#039;&amp;#039;&amp;#039; — instead of writing scaffolding from scratch, start from a working app and cut it down.&lt;br /&gt;
&lt;br /&gt;
Practical notes:&lt;br /&gt;
* Expect the first local run to fail on dependencies or a missing key. That failure, written down, is the reusable knowledge — not the happy path.&lt;br /&gt;
* Check the licence before adapting anything. &amp;#039;&amp;#039;&amp;#039;Open-source and permissively-licensed are not the same thing&amp;#039;&amp;#039;&amp;#039;, and licence direction is one-way once code is borrowed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Search keywords:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;Clone Hugging Face Space locally&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Build AI apps with Cursor and Hugging Face&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Integrate LLM API keys in Hugging Face local apps&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 3. Finding models and datasets ==&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Model Hub&amp;#039;&amp;#039;&amp;#039; is the core: over 1.5 million open-source models categorised &amp;#039;&amp;#039;&amp;#039;by task&amp;#039;&amp;#039;&amp;#039; — computer vision, NLP, audio, robotics. The &amp;#039;&amp;#039;&amp;#039;Datasets&amp;#039;&amp;#039;&amp;#039; section holds the data that trained them.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Navigate by task tag, not by keyword.&amp;#039;&amp;#039;&amp;#039; Searching an acronym returns papers; filtering by task returns weights:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;code&amp;gt;https://huggingface.co/models?pipeline_tag=robotics&amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;https://huggingface.co/api/models?pipeline_tag=robotics&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;(API form, for scripting)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The advanced feature almost nobody touches is the &amp;#039;&amp;#039;&amp;#039;dataset viewer&amp;#039;&amp;#039;&amp;#039;: chat with a dataset through an AI agent and &amp;#039;&amp;#039;&amp;#039;run SQL queries in the browser&amp;#039;&amp;#039;&amp;#039; to analyse it &amp;#039;&amp;#039;before&amp;#039;&amp;#039; downloading a single gigabyte. For evaluating training data this is the highest-value habit on the page.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Our standing admission rule applies here:&amp;#039;&amp;#039;&amp;#039; a model card is a &amp;#039;&amp;#039;&amp;#039;claim, not a measurement&amp;#039;&amp;#039;&amp;#039;. Nothing enters the local model roster on a card alone — it enters on a real API call, the same gate used for the Synopsis model-selection slate. See [[Comfac GPU Scaling and AI Research Goals]] §Applied Model Evaluation and [[🧠 Process: Selecting and Installing the Right Ollama Model for Your Hardware]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Search keywords:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;How to choose and run Hugging Face models&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Hugging Face dataset viewer SQL tutorial&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Fine-tuning open source models Hugging Face&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 4. Scaling for teams and enterprise ==&lt;br /&gt;
&lt;br /&gt;
For organisations and academic teams the paid tiers add private workspaces, single sign-on (SSO), and granular access control.&lt;br /&gt;
&lt;br /&gt;
The structural benefit is that &amp;#039;&amp;#039;&amp;#039;compute and storage are billed separately&amp;#039;&amp;#039;&amp;#039; — no paying for idle hardware. Two working modes follow:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SSH directly onto Spaces hardware&amp;#039;&amp;#039;&amp;#039; and develop there, as if it were a remote box.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;hf jobs&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; — fire a heavy training workload at remote hardware and collect the result.&lt;br /&gt;
&lt;br /&gt;
The second is what makes a fine-tune possible without owning the GPU it would need.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Search keywords:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;quot;Hugging Face Enterprise setup guide&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Running hf jobs on zero GPU Hugging Face&amp;quot;&amp;#039;&amp;#039; · &amp;#039;&amp;#039;&amp;quot;Hugging Face private workspaces and security&amp;quot;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Open problem — where this is going ==&lt;br /&gt;
&lt;br /&gt;
Three goals, none closed. Tracked in &amp;lt;code&amp;gt;work/comfac-operations/BACKLOG-huggingface-model-sourcing-and-training.md&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Better than stock.&amp;#039;&amp;#039;&amp;#039; The models we run locally today are stock bases. Tuned community models in the same size band may follow instructions better for a specific task, at no cost — but only a run against a gate written &amp;#039;&amp;#039;&amp;#039;beforehand&amp;#039;&amp;#039;&amp;#039; counts as evidence.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Harnesses instead of rebuilds.&amp;#039;&amp;#039;&amp;#039; Identify the Spaces that overlap tooling we would otherwise write ourselves.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Training on owned data.&amp;#039;&amp;#039;&amp;#039; Start at a few hundred data points and work toward thousands.&lt;br /&gt;
&lt;br /&gt;
=== The constraint on goal 3 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Frontier-Token Quarantine is binding.&amp;#039;&amp;#039;&amp;#039; Per [[De-Risk: Sovereign Training Data v0.1]], distilling commercial frontier-model outputs into our own weights trades a regulatory dependency for a &amp;#039;&amp;#039;&amp;#039;contractual liability&amp;#039;&amp;#039;&amp;#039; — in writing, with discoverable provenance logs. Any training corpus must be &amp;#039;&amp;#039;&amp;#039;clean by construction&amp;#039;&amp;#039;&amp;#039;. Tooling cannot launder provenance; that was named as the weakest claim in the source report.&lt;br /&gt;
&lt;br /&gt;
=== Hardware reality check ===&lt;br /&gt;
&lt;br /&gt;
Anything meant to run on a normal workstation has to fit the VRAM actually available, &amp;#039;&amp;#039;&amp;#039;alongside whatever else is already resident&amp;#039;&amp;#039;&amp;#039; — a vision model kept loaded for a document pipeline is not free. Size band and quantisation are a filter applied &amp;#039;&amp;#039;&amp;#039;first&amp;#039;&amp;#039;&amp;#039;, not a compromise made afterwards. A related finding already measured here: 4-bit quantisation degrades digit reading, so anything touching numbers on a form runs at 8-bit.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[De-Risk: Sovereign Training Data v0.1]] — why owned weights matter and what may not go in the corpus&lt;br /&gt;
* [[Comfac GPU Scaling and AI Research Goals]] — GPU capacity and the applied model-evaluation method&lt;br /&gt;
* [[🧠 Process: Selecting and Installing the Right Ollama Model for Your Hardware]]&lt;br /&gt;
* [[Project OpenCoder: AI Independence Initiative]]&lt;br /&gt;
* [[Directed Execution: Token-Efficient Agent Development Process]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AI]]&lt;br /&gt;
[[Category:Research]]&lt;br /&gt;
[[Category:Open Source]]&lt;br /&gt;
[[Category:Comfac]]&lt;/div&gt;</description>
			<pubDate>Sun, 02 Aug 2026 05:03:29 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Hugging_Face_Practical_Guide_260802</comments>
		</item>
		<item>
			<title>Audio Learning</title>
			<link>https://mediawiki.comfac.net/index.php?title=Audio_Learning&amp;diff=268&amp;oldid=0</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Audio_Learning&amp;diff=268&amp;oldid=0</guid>
			<description>&lt;p&gt;Created: Audio Learning research-to-TTS tool article with link to citfj repo&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{New article banner|date=2026-08-01}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Audio Learning&amp;#039;&amp;#039;&amp;#039; is the practice of converting research, articles, notes, and study material into scripts written to be &amp;#039;&amp;#039;&amp;#039;listened to&amp;#039;&amp;#039;&amp;#039; rather than read. It is a shared Comfac tool maintained as a private Forgejo repository and designed for staff who consume technical material hands-free — commuting, walking, between machines on the plant floor.&lt;br /&gt;
&lt;br /&gt;
== What it is ==&lt;br /&gt;
&lt;br /&gt;
Written prose and spoken prose are different mediums. A reader can re-read a sentence, skim a heading, and hold structure visually. A listener gets one linear pass with no backtracking. Audio Learning provides the discipline to re-compose research for the ear.&lt;br /&gt;
&lt;br /&gt;
The repository contains a &amp;#039;&amp;#039;&amp;#039;skill for AI agents&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;research-to-tts&amp;#039;&amp;#039;&amp;#039;) that converts knowledge into one of two house formats:&lt;br /&gt;
&lt;br /&gt;
; Lecture format (Great Courses style)&lt;br /&gt;
: For technical study — networking, protocols, CISM/CISSP, security architecture, governance frameworks, systems engineering, ISO standards. The listener walks away understanding a mechanism they did not understand before. Useful for Comfac training material: Network+ basics, pfSense operations, BIR compliance, ERPNext workflows.&lt;br /&gt;
&lt;br /&gt;
; Analyst format (thesis-and-evidence style)&lt;br /&gt;
: For contested material — energy markets, housing policy, supply-chain economics, regulatory analysis, industry studies. The listener walks away able to make or defend a decision. Useful for bid analysis, feasibility studies, vendor evaluations, and competitive intelligence.&lt;br /&gt;
&lt;br /&gt;
== What it contains ==&lt;br /&gt;
&lt;br /&gt;
* Concrete prose mechanics — how to speak numbers, acronyms, symbols, citations, code, and homographs so a text-to-speech engine renders them correctly&lt;br /&gt;
* Format templates — cold-open structures, spine metaphors, prerequisite ordering, decision frames, thesis stacking, approach ladders, and tripwire indicators&lt;br /&gt;
* Visual description protocols — a two-pass method for turning charts, diagrams, tables, and maps into something a listener can build a mental model of&lt;br /&gt;
* A pre-delivery audit — ten checks every script must pass before it is spoken&lt;br /&gt;
&lt;br /&gt;
== Where it lives ==&lt;br /&gt;
&lt;br /&gt;
The source repository is private on the Comfac Forgejo:&lt;br /&gt;
&lt;br /&gt;
[https://git.comfac-it.net/cgg/audio-learning cgg/audio-learning]&lt;br /&gt;
&lt;br /&gt;
== How to use it ==&lt;br /&gt;
&lt;br /&gt;
An AI agent loads the skill, reads the reference files, picks a format, plans an outline from the source material, drafts a script with spoken prose only (no markdown, no symbols, no parentheticals), and audits the result before delivering it. The output is a plain-text script with a non-spoken production header and a clean spoken body — ready to be fed into any text-to-speech engine.&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
&lt;br /&gt;
* [[GPU Scaling and AI Research|GPU Scaling and AI Research Goals]] — Comfac&amp;#039;s model-evaluation infrastructure&lt;br /&gt;
* [[Open Source Software Analysis]] — tool evaluation methodology&lt;br /&gt;
* [[Resume / CV Renamer Pipeline]] — OCR-to-searchable pipeline (same ingestion-to-structured-output pattern)&lt;br /&gt;
&lt;br /&gt;
[[Category:Tools]]&lt;br /&gt;
[[Category:AI Agents]]&lt;br /&gt;
[[Category:Training]]&lt;/div&gt;</description>
			<pubDate>Sat, 01 Aug 2026 06:15:16 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Audio_Learning</comments>
		</item>
		<item>
			<title>Main Page</title>
			<link>https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=267&amp;oldid=264</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=267&amp;oldid=264</guid>
			<description>&lt;p&gt;Tools &amp;amp; Productivity: add Resume / CV Renamer Pipeline&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:25, 31 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l104&quot;&gt;Line 104:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 104:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;column-count:2; column-gap:2em;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;div style=&amp;quot;column-count:2; column-gap:2em;&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Excel Description Filler Tool 📝]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Excel Description Filler Tool 📝]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Resume CV Renamer Pipeline|Resume / CV Renamer Pipeline]] — CV intake → OCR / vision-OCR → AI field extraction → date-stamped rename + VCF export&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/Comfac-Global-Group/comfac-studies Comfac Studies - Spaced Repetiton Active Recall]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/Comfac-Global-Group/comfac-studies Comfac Studies - Spaced Repetiton Active Recall]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[LibreOffice / Nextcloud Office – &amp;quot;Due Tasks&amp;quot; Conditional Formatting]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[LibreOffice / Nextcloud Office – &amp;quot;Due Tasks&amp;quot; Conditional Formatting]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key database:diff:1.41:old-264:rev-267:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 31 Jul 2026 14:25:42 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Main_Page</comments>
		</item>
		<item>
			<title>Resume CV Renamer Pipeline</title>
			<link>https://mediawiki.comfac.net/index.php?title=Resume_CV_Renamer_Pipeline&amp;diff=266&amp;oldid=0</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Resume_CV_Renamer_Pipeline&amp;diff=266&amp;oldid=0</guid>
			<description>&lt;p&gt;Add Resume / CV Renamer Pipeline tool article (intake, OCR/vision-OCR, AI extraction, rename, VCF export)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Resume / CV Renamer Pipeline =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f8f9fa; border:1px solid #ddd; border-radius:4px; padding:10px 16px; margin-bottom:16px;&amp;quot;&amp;gt;&lt;br /&gt;
Automated resume ingestion, OCR, AI extraction, file renaming, and VCF contact export for recruitment workflows.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Location:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;/path/to/resume-renamer/&amp;lt;/code&amp;gt; (configure to your local HR/resume folder)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Upstream docs:&amp;#039;&amp;#039;&amp;#039; [[Frappe HRMS - Ch01 Recruitment]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== What It Does ==&lt;br /&gt;
&lt;br /&gt;
# Drop a resume file (PDF, DOCX, JPG, PNG) into the folder.&lt;br /&gt;
# The scanner detects the new file and extracts text with &amp;lt;code&amp;gt;pdftotext&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Image files or image-based PDFs are converted with &amp;lt;code&amp;gt;img2pdf&amp;lt;/code&amp;gt; and OCR&amp;#039;d with &amp;lt;code&amp;gt;ocrmypdf&amp;lt;/code&amp;gt; if available.&lt;br /&gt;
# If OCR fails or is unavailable, the scanner falls back to &amp;#039;&amp;#039;&amp;#039;vision OCR&amp;#039;&amp;#039;&amp;#039; using a local VLM (e.g. &amp;lt;code&amp;gt;glm-ocr:bf16&amp;lt;/code&amp;gt;).&lt;br /&gt;
# A local LLM extracts structured candidate data.&lt;br /&gt;
# The file is renamed to: &amp;lt;code&amp;gt;YYMMDD Full Name Degree.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
# A &amp;lt;code&amp;gt;YYMMDD-HHMMSS_Bulk_Import.vcf&amp;lt;/code&amp;gt; file is generated for contact import.&lt;br /&gt;
&lt;br /&gt;
The single source of truth is the SQLite database &amp;lt;code&amp;gt;resumes.db&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Supported Inputs ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Format !! Handling&lt;br /&gt;
|-&lt;br /&gt;
| PDF with text || Direct extraction&lt;br /&gt;
|-&lt;br /&gt;
| Image-based PDF || &amp;lt;code&amp;gt;ocrmypdf&amp;lt;/code&amp;gt; → vision OCR fallback&lt;br /&gt;
|-&lt;br /&gt;
| JPG / PNG || &amp;lt;code&amp;gt;img2pdf&amp;lt;/code&amp;gt; → vision OCR fallback&lt;br /&gt;
|-&lt;br /&gt;
| DOCX || Detected; convert to PDF manually if needed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Quick Start ==&lt;br /&gt;
&lt;br /&gt;
=== Run once manually ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /path/to/resume-renamer&lt;br /&gt;
source ./venv/bin/activate&lt;br /&gt;
python cv_auto_scanner.py --once&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dry-run preview ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python cv_auto_scanner.py --once --dry-run&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Daemon mode ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python cv_auto_scanner.py --daemon --interval 900  # 15 minutes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Force a full re-scan ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -f .scanner_state.json&lt;br /&gt;
python cv_auto_scanner.py --once&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Common Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Degree shows &amp;quot;General&amp;quot; or is empty ===&lt;br /&gt;
&lt;br /&gt;
The scanner now explicitly accepts diplomas and certificates in the &amp;lt;code&amp;gt;degree&amp;lt;/code&amp;gt; field. If an older file still shows &amp;quot;General&amp;quot;, reset it and reprocess:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ./venv/bin/activate&lt;br /&gt;
python3 -c &amp;quot;&lt;br /&gt;
import resume_db&lt;br /&gt;
resume_db.init_db()&lt;br /&gt;
resume_db.upsert_candidate(&amp;#039;ORIGINAL_FILENAME.pdf&amp;#039;, status=&amp;#039;pending&amp;#039;, retry_count=0, last_error=None)&lt;br /&gt;
&amp;quot;&lt;br /&gt;
rm -f .scanner_state.json&lt;br /&gt;
python cv_auto_scanner.py --once&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Text too short / unreadable&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The scanner automatically tries OCR and vision OCR. If it still fails:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
source ./venv/bin/activate&lt;br /&gt;
python /path/to/rpdf-skills/vision_ocr.py FAILED_FILE.pdf --model glm-ocr:bf16 --format text -o extracted.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then rebuild a searchable PDF and re-run the scanner.&lt;br /&gt;
&lt;br /&gt;
=== venv broken after Python upgrade ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install python3.14-venv python3-pip&lt;br /&gt;
cd /path/to/resume-renamer&lt;br /&gt;
rm -rf venv&lt;br /&gt;
python3.14 -m venv venv&lt;br /&gt;
source ./venv/bin/activate&lt;br /&gt;
pip install --upgrade pip&lt;br /&gt;
pip install img2pdf requests pdfplumber psycopg2-binary fpdf2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== VCF Import ==&lt;br /&gt;
&lt;br /&gt;
New &amp;lt;code&amp;gt;*_Bulk_Import.vcf&amp;lt;/code&amp;gt; files are generated automatically. Import them into your contacts app:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Google Contacts:&amp;#039;&amp;#039;&amp;#039; contacts.google.com → Import → Select VCF&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Android:&amp;#039;&amp;#039;&amp;#039; Copy VCF to phone → Contacts → Settings → Import&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Thunderbird:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;thunderbird -compose &amp;quot;to=hr@example.com,subject=Contact Card,attachment=/path/to/YYMMDD-HHMMSS_Bulk_Import.vcf&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The VCF uses a non-standard layout for multi-part names:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! vCard Field !! Value&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (Last Name) || Role context, e.g. &amp;lt;code&amp;gt;Electrical Applicant 260616&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (First Name) || Candidate&amp;#039;s full name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;FN&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;{Full Name} - {Context}&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To specify the context for a batch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python cv_auto_scanner.py --vcf-context &amp;quot;Electrical Applicant 260616&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Related Pages ==&lt;br /&gt;
&lt;br /&gt;
* [[Frappe HRMS]]&lt;br /&gt;
* [[Frappe HRMS - Ch01 Recruitment]]&lt;br /&gt;
* [[Steps to Repair and OCR a Scanned or Corrupted PDF in Ubuntu]]&lt;br /&gt;
* [[🧠 Process: Selecting and Installing the Right Ollama Model for Your Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[Category:HR]]&lt;br /&gt;
[[Category:Recruitment]]&lt;br /&gt;
[[Category:Automation]]&lt;br /&gt;
[[Category:Comfac]]&lt;br /&gt;
[[Category:IT Operations]]&lt;/div&gt;</description>
			<pubDate>Fri, 31 Jul 2026 14:25:40 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Resume_CV_Renamer_Pipeline</comments>
		</item>
		<item>
			<title>Comfac GPU Scaling and AI Research Goals</title>
			<link>https://mediawiki.comfac.net/index.php?title=Comfac_GPU_Scaling_and_AI_Research_Goals&amp;diff=265&amp;oldid=48</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Comfac_GPU_Scaling_and_AI_Research_Goals&amp;diff=265&amp;oldid=48</guid>
			<description>&lt;p&gt;Add Applied Model Evaluation - Synopsis mail-agent model-selection test (2026-07-31)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:02, 31 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l34&quot;&gt;Line 34:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Study and participate in open-source projects that allow community-based compute contributions (similar to Folding@home).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Study and participate in open-source projects that allow community-based compute contributions (similar to Folding@home).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Learn and experiment with decentralized compute-sharing models that enable contributors to sell &amp;#039;&amp;#039;&amp;#039;tokens or compute time&amp;#039;&amp;#039;&amp;#039; securely and transparently.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Learn and experiment with decentralized compute-sharing models that enable contributors to sell &amp;#039;&amp;#039;&amp;#039;tokens or compute time&amp;#039;&amp;#039;&amp;#039; securely and transparently.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Applied Model Evaluation — Synopsis Mail-Agent Test (2026-07-31) ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;First concrete output under the AI research program: an empirical model-selection harness, built for the Synopsis &quot;talk to your email&quot; agent but reusable for CSAMA and 2B evaluation.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt; Evaluator: Kimi Code CLI / k1.6 · Methodology: live infra checks + real API tool-call sweeps + mailbox-anchored question verification. Full detail: &amp;lt;code&amp;gt;work/comfac-synopsys/docs/260731-eod-model-selection-session.md&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;plans/260731-115026-model-selection-test.md&amp;lt;/code&amp;gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Method over benchmarks:&#039;&#039;&#039; candidates are gated on &#039;&#039;tool-calling fidelity, citation honesty, and admitting absence&#039;&#039; — not prose quality or public benchmark scores. A single fabricated citation fails a candidate outright; every failure carries a failure-mode tag (fabrication / no-search / false-absence / wrong-args / shallow-search / misread / multi-hop-fail) so &quot;failed&quot; distinguishes untrustworthy from merely fixable.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Slate (7 candidates, all tools-gated on real calls):&#039;&#039;&#039; qwen3-vl:8b-instruct-q8_0 (control), qwen3-vl:8b-instruct, qwen3.5:9b (thinking on/off arm), gemma4:12b, qwen3:14b, ibm/granite4.1:8b, fablevibes:14b-a3b (community MoE prune — provenance caveat).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Hardware finding:&#039;&#039;&#039; 15 GiB usable VRAM (RX 9060 XT class) excludes 27B-class models at Q4 (17 GB+) — concrete evidence for the &#039;&#039;&#039;20 GB+ procurement path&#039;&#039;&#039; (RX 7900 XT / Radeon PRO R9700) in the scaling goals above.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Small-model finding:&#039;&#039;&#039; sub-4B models mostly cannot run a tool loop (granite3.3:2b, phi4-mini failed to emit tool calls at all; llama3.2:3b marginal). For CPU/micro-model (CSAMA) roles, plan non-tool architectures (extractive prefilter → small-model polish).&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Infra prerequisites proven:&#039;&#039;&#039; Ollama as an enabled systemd service, VPN-reachable from the batch host, no auto-sleep, 100% GPU placement — the pattern any &quot;chief model host&quot; in the cluster must replicate.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Status:&#039;&#039;&#039; gated run blocked on one human step (Justin&#039;s 20 verified questions). Harness + scorer + golden-set format in &amp;lt;code&amp;gt;work/comfac-synopsys/harness/&amp;lt;/code&amp;gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key database:diff:1.41:old-48:rev-265:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Fri, 31 Jul 2026 13:02:32 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Comfac_GPU_Scaling_and_AI_Research_Goals</comments>
		</item>
		<item>
			<title>Main Page</title>
			<link>https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=264&amp;oldid=262</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=264&amp;oldid=262</guid>
			<description>&lt;p&gt;Add De-Risk article link&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 15:21, 15 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l59&quot;&gt;Line 59:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 59:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[PAD-Driven ERPNext Strategy 260303]] — Procedural Agentic Development for Frappe/ERPNext configuration and deployment&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[PAD-Driven ERPNext Strategy 260303]] — Procedural Agentic Development for Frappe/ERPNext configuration and deployment&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Directed Execution: Token-Efficient Agent Development Process]] — Director/Executor/Checker loop and skill distillation for token-efficient agent development (v0.1, 2026-07-15)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Directed Execution: Token-Efficient Agent Development Process]] — Director/Executor/Checker loop and skill distillation for token-efficient agent development (v0.1, 2026-07-15)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[De-Risk: Sovereign Training Data v0.1]] — Frontier-Token Quarantine and the ToS-clean path to owned model weights, prompted by the June 2026 Fable 5 export-control suspension (v0.1, 2026-07-15)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key database:diff:1.41:old-262:rev-264:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 15 Jul 2026 15:21:51 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Main_Page</comments>
		</item>
		<item>
			<title>De-Risk: Sovereign Training Data v0.1</title>
			<link>https://mediawiki.comfac.net/index.php?title=De-Risk:_Sovereign_Training_Data_v0.1&amp;diff=263&amp;oldid=0</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=De-Risk:_Sovereign_Training_Data_v0.1&amp;diff=263&amp;oldid=0</guid>
			<description>&lt;p&gt;Add De-Risk: Sovereign Training Data v0.1&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= De-Risk: Sovereign Training Data v0.1 =&lt;br /&gt;
== Building Model Intelligence Without Frontier Tokens in the Corpus ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Evaluator:&amp;#039;&amp;#039;&amp;#039; Justin Aquino (CEO / CISO-DPO), authored as JCA&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Evaluation Date:&amp;#039;&amp;#039;&amp;#039; 2026-07-15&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Methodology:&amp;#039;&amp;#039;&amp;#039; Strategy document — synthesis of the Fable 5 export-control incident, Anthropic/OpenAI commercial-terms analysis, and the Directed Execution Process economics. Companion to &amp;lt;code&amp;gt;2026-07-15-fable-ban-sovereign-ai-and-local-model-strategy.md&amp;lt;/code&amp;gt; (source report, veracity-reviewed) and &amp;lt;code&amp;gt;2026-07-15-fable-fact-check-and-csama-legal-qa-conversation.md&amp;lt;/code&amp;gt; (full Q&amp;amp;A transcript).&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Owner:&amp;#039;&amp;#039;&amp;#039; JCNA (CEO / CISO-DPO) · &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; Draft for review · &amp;#039;&amp;#039;&amp;#039;Date:&amp;#039;&amp;#039;&amp;#039; 2026-07-15&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Companion documents:&amp;#039;&amp;#039;&amp;#039; Directed Execution Process v0.1 · Fable Ban &amp;amp; Local AI (veracity-reviewed 2026-07)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 1. Context — What the Fable Episode Actually Proved ==&lt;br /&gt;
&lt;br /&gt;
Three facts from June–July 2026 matter to us. Everything else in the source document was dramatization.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.1 Frontier access is now a policy variable, not an infrastructure constant.&amp;#039;&amp;#039;&amp;#039; A Mythos-class model went from launch to worldwide suspension in three days on a single Commerce directive, and stayed dark for 19 days. The trigger was external (a reported jailbreak escalated to Treasury), the scope was blunt (all foreign nationals, unverifiable, therefore everyone), and the reversal was equally abrupt. No SLA, no contract, no self-hosted deployment would have protected a workflow hard-wired to that model. The lesson is not &amp;quot;Anthropic is unreliable&amp;quot; — the lesson is that &amp;#039;&amp;#039;any&amp;#039;&amp;#039; frontier vendor now sits downstream of national-security discretion, and OpenAI&amp;#039;s government-coordinated GPT-5.6 rollout confirms the pattern applies industry-wide.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.2 The naive response — distill frontier outputs into your own weights — is a legal trap.&amp;#039;&amp;#039;&amp;#039; Anthropic&amp;#039;s and OpenAI&amp;#039;s terms broadly prohibit using model outputs to train competing models. A pipeline that harvests Fable or Sol completions into a fine-tuning corpus trades a &amp;#039;&amp;#039;regulatory&amp;#039;&amp;#039; dependency for a &amp;#039;&amp;#039;contractual&amp;#039;&amp;#039; liability, and does so in writing, with provenance logs that would be discoverable. For an organization whose CISO-DPO signs the compliance posture, this is not a gray area we can occupy. The source document&amp;#039;s &amp;quot;Distilabel ensures ToS compliance&amp;quot; claim was its weakest section precisely because tooling cannot launder provenance.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.3 The clean asset class already exists in our practice.&amp;#039;&amp;#039;&amp;#039; Skills, specs, checklists, and QA-derived process knowledge — instructions authored by our people, versioned in our Forgejo — transferred capability across the blackout at zero legal risk. The Directed Execution Process doc formalized this. What it did &amp;#039;&amp;#039;not&amp;#039;&amp;#039; yet do is close the loop from process knowledge to &amp;#039;&amp;#039;&amp;#039;model weights we own&amp;#039;&amp;#039;&amp;#039;. This document closes that loop, cleanly.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 2. The De-Risk Principle: Frontier-Token Quarantine ==&lt;br /&gt;
&lt;br /&gt;
One rule, enforced architecturally, resolves the entire ToS exposure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;No frontier-model-generated token ever enters the training corpus. Frontier models may shape the process; they may never author the data.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This splits our AI estate into two zones:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Zone !! Contents !! Frontier models (Claude/Fable, Sol)... !! Legal character&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Process zone&amp;#039;&amp;#039;&amp;#039; || Plans, specs, QA verdicts, RCAs, skill drafts, test designs || ...operate freely here || Ordinary licensed use — Claude helping our team work&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Corpus zone&amp;#039;&amp;#039;&amp;#039; || Prompts, completions, error traces, corrections, preference pairs destined for fine-tuning || ...are architecturally excluded || 100% owned: our people, our machines, open-weight models, permissive licenses&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The subtle failure mode to guard against: a Claude-written QA verdict or RCA is still a frontier token. If that text is pasted verbatim into a training sample, the quarantine is breached. Therefore:&lt;br /&gt;
&lt;br /&gt;
* **Claude&amp;#039;s judgments become &amp;#039;&amp;#039;signals&amp;#039;&amp;#039;, not &amp;#039;&amp;#039;text&amp;#039;&amp;#039;.** Pass/fail, severity, &amp;quot;principle violated&amp;quot; tags — structured fields a human confirms — may drive &amp;#039;&amp;#039;selection and labeling&amp;#039;&amp;#039; of corpus samples. Claude&amp;#039;s prose stays in the process zone.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;The strongest labels don&amp;#039;t come from Claude at all.&amp;#039;&amp;#039;&amp;#039; They come from deterministic verifiers — tests pass, lint clean, build succeeds, output matches oracle. Claude helps &amp;#039;&amp;#039;design&amp;#039;&amp;#039; the tests; the CI system &amp;#039;&amp;#039;issues&amp;#039;&amp;#039; the labels. A label emitted by pytest has no author to have a ToS with.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Skills remain process-zone artifacts.&amp;#039;&amp;#039;&amp;#039; Instructions and context engineering are not model training; the Directed Execution loop continues unchanged. This document adds a parallel track, it does not replace that one.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 3. The Error Foundry — Why the Error Is the Gold ==&lt;br /&gt;
&lt;br /&gt;
Commodity training data is worthless: every lab has scraped the same internet, and open models are already trained on it. What no one else has — what cannot be scraped, bought, or distilled — is &amp;#039;&amp;#039;&amp;#039;the distribution of failures our specific models make on our specific work, paired with verified corrections.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A failure trajectory is the single most valuable sample type because it encodes three things at once:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Where the model&amp;#039;s capability boundary actually is&amp;#039;&amp;#039;&amp;#039; (not where benchmarks claim it is — recall that ~30% of SWE-bench Pro tasks are broken; our CI is not).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;A hard negative&amp;#039;&amp;#039;&amp;#039; — a plausible-looking wrong answer, which is exactly what preference-optimization methods (DPO/KTO) need and exactly what synthetic &amp;quot;textbook&amp;quot; data lacks.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;A verified positive twin&amp;#039;&amp;#039;&amp;#039; — once the correction lands and the verifier goes green, we hold a (failed attempt, working attempt) pair on identical context. That pair is a gradient pointing from &amp;quot;what our model does&amp;quot; to &amp;quot;what our work requires.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This also sidesteps the model-collapse problem the source document correctly cited: collapse comes from training on unfiltered synthetic output. Our corpus is synthetic &amp;#039;&amp;#039;attempts&amp;#039;&amp;#039; filtered by &amp;#039;&amp;#039;non-synthetic ground truth&amp;#039;&amp;#039; (executing code, real acceptance criteria, human confirmation). The verifier anchors the distribution to reality.&lt;br /&gt;
&lt;br /&gt;
We already run this pattern. &amp;#039;&amp;#039;&amp;#039;Team C at Cabuyao logs negative information from AGV runs for model training&amp;#039;&amp;#039;&amp;#039; — this document generalizes Team C&amp;#039;s discipline to the entire software and knowledge-work estate.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 4. Pipeline Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== 4.1 Roles ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Layer !! Actor !! Produces !! Zone&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Direction&amp;#039;&amp;#039;&amp;#039; || Claude (Director session) || FRD-style spec, acceptance criteria, test design, ≤2K-token plan || Process&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Execution&amp;#039;&amp;#039;&amp;#039; || DeepSeek / Kimi / local Qwen &amp;amp; DeepSeek on OpenCode (vLLM, dual RX 7900 XT) || All code, drafts, attempts — every token of it || &amp;#039;&amp;#039;&amp;#039;Corpus&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Verification&amp;#039;&amp;#039;&amp;#039; || CI: pytest/lint/type-check/build via n8n or pre-commit || Deterministic pass/fail labels || &amp;#039;&amp;#039;&amp;#039;Corpus&amp;#039;&amp;#039;&amp;#039; (labels)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;QA&amp;#039;&amp;#039;&amp;#039; || Claude (Checker session, separate from Director) || Verdict as structured fields; prose stays out of corpus || Process&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;RCA&amp;#039;&amp;#039;&amp;#039; || Claude + human || Root-cause analysis → feeds &amp;#039;&amp;#039;skill drafts&amp;#039;&amp;#039; and &amp;#039;&amp;#039;new test cases&amp;#039;&amp;#039;, never sample text || Process&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Correction&amp;#039;&amp;#039;&amp;#039; || Open model (re-attempt with hint) or human dev || The corrected trajectory — corpus-eligible because its author is ours || &amp;#039;&amp;#039;&amp;#039;Corpus&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Curation&amp;#039;&amp;#039;&amp;#039; || Interns + devs || Provenance manifest, dedup, pair assembly, PR to dataset repo || Corpus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The critical asymmetry: &amp;#039;&amp;#039;&amp;#039;Claude reads everything and authors nothing that trains.&amp;#039;&amp;#039;&amp;#039; Its intelligence is spent on specs, test oracles, verdict signals, and RCA insight — all of which make the &amp;#039;&amp;#039;open&amp;#039;&amp;#039; models&amp;#039; next attempts better, and make the &amp;#039;&amp;#039;corpus&amp;#039;&amp;#039; labels sharper, without ever contributing a training token.&lt;br /&gt;
&lt;br /&gt;
=== 4.2 The loop, end to end ===&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Objective in.&amp;#039;&amp;#039;&amp;#039; Real ticket or deliberately challenging intern objective. Director-Claude produces spec + machine-checkable acceptance criteria. Spec is stored in Forgejo (process repo).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Open model executes.&amp;#039;&amp;#039;&amp;#039; Full trajectory logged: prompt, context, every attempt, tool calls, outputs. This logging is non-negotiable — the exhaust &amp;#039;&amp;#039;is&amp;#039;&amp;#039; the product.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Verifier fires.&amp;#039;&amp;#039;&amp;#039; Fail → the failure trace is tagged and banked (this is the gold, not discarded). Pass → candidate positive.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;On failure:&amp;#039;&amp;#039;&amp;#039; RCA (Claude + human) identifies the principle violated → two outputs: (a) a &amp;#039;&amp;#039;skill draft&amp;#039;&amp;#039; or new test case (process zone), (b) a &amp;#039;&amp;#039;hint&amp;#039;&amp;#039; given to the open model for a re-attempt. The re-attempt that passes becomes the positive twin.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Pair assembly.&amp;#039;&amp;#039;&amp;#039; (context, failed, passed, verifier evidence, provenance manifest) → PR into the dataset repo. Intern authors it; dev reviews it; Forgejo history is the audit trail and the intern&amp;#039;s portfolio.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Periodic fine-tune.&amp;#039;&amp;#039;&amp;#039; When a domain accumulates enough pairs (target: 500–1,000 verified pairs before first run), fine-tune Qwen/DeepSeek variants on the 7900 XT rig (LoRA/QLoRA first — full fine-tunes are not needed to capture correction patterns). Evaluate against a held-out set of &amp;#039;&amp;#039;our own&amp;#039;&amp;#039; past failures.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Promotion.&amp;#039;&amp;#039;&amp;#039; A tuned model earns executor duty only by beating the base model on the held-out failure set and on live first-pass acceptance rate — the same metric already in the Directed Execution scoreboard.&lt;br /&gt;
&lt;br /&gt;
=== 4.3 Provenance manifest (per sample, mandatory) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sample_id: uuid&lt;br /&gt;
generator: {model: qwen2.5-coder-32b, host: PC00-vllm, license: apache-2.0}&lt;br /&gt;
context_source: {ticket: FORGEJO-####, spec_hash: ..., spec_author: human|claude-process-zone}&lt;br /&gt;
label: {verifier: pytest@ci, result: fail|pass, evidence: run_url}&lt;br /&gt;
frontier_tokens_present: false        # hard gate; CI rejects true&lt;br /&gt;
human_touch: {curated_by: intern_id, reviewed_by: dev_id}&lt;br /&gt;
correction_lineage: failed_sample_id  # for positive twins&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;frontier_tokens_present: false&amp;lt;/code&amp;gt; is enforced by a pre-merge check on the dataset repo: samples whose context includes Claude-session exports are rejected mechanically, not by policy memo. Same philosophy as Synopsis — deterministic rules first.&lt;br /&gt;
&lt;br /&gt;
=== 4.4 Storage &amp;amp; plumbing ===&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Trajectory log:&amp;#039;&amp;#039;&amp;#039; SQLite first (Synopsis pattern), one DB per domain, schema versioned in Forgejo. Graduate to ERPNext DocTypes only when the team needs commission-model-style visibility.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Dataset repo:&amp;#039;&amp;#039;&amp;#039; dedicated Forgejo org, one repo per domain (&amp;lt;code&amp;gt;ds-coding&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ds-erpnext&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ds-docs&amp;lt;/code&amp;gt;), PR-gated, LFS for traces.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Orchestration:&amp;#039;&amp;#039;&amp;#039; n8n handles verifier dispatch and label writes; no human copies test results by hand.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Compute:&amp;#039;&amp;#039;&amp;#039; existing dual RX 7900 XT / vLLM stack for both inference and LoRA training; no new capex required for Phase 1–2.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 5. Risk Register — What This De-Risks and What It Doesn&amp;#039;t ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Risk !! Naive distillation !! This architecture&lt;br /&gt;
|-&lt;br /&gt;
| Frontier ToS breach (training competing models) || High — corpus is frontier tokens || &amp;#039;&amp;#039;&amp;#039;Eliminated&amp;#039;&amp;#039;&amp;#039; — corpus is 100% own/open provenance, mechanically enforced&lt;br /&gt;
|-&lt;br /&gt;
| Frontier blackout (Fable-type event) || Capability frozen at last distill || Skills + tuned weights both survive; Claude roles degrade gracefully to human plan/QA (slower, not broken)&lt;br /&gt;
|-&lt;br /&gt;
| Model collapse from synthetic data || High — unfiltered frontier outputs || Low — every sample anchored by deterministic verifier; failures kept as hard negatives&lt;br /&gt;
|-&lt;br /&gt;
| Vendor lock-in of process knowledge || N/A || Skills in model-portable SKILL.md format; dataset in open formats; weights are Apache/MIT-base&lt;br /&gt;
|-&lt;br /&gt;
| Data privacy (RA 10173) || Frontier API sees raw work product || Secrets/prod data → &amp;#039;&amp;#039;&amp;#039;local agents only&amp;#039;&amp;#039;&amp;#039; (existing hard rule, unchanged); corpus lives on-prem; CISO-DPO sign-off on any sample class containing personal data&lt;br /&gt;
|-&lt;br /&gt;
| Benchmark self-deception || Marketing benchmarks || Held-out set of our own historical failures — unfakeable, directly relevant&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Residual risks, stated honestly:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;Judge-influence gray zone.&amp;#039;&amp;#039; Even using Claude&amp;#039;s pass/fail &amp;#039;&amp;#039;signals&amp;#039;&amp;#039; to select samples arguably &amp;quot;assists&amp;quot; model development. Our mitigation is that the load-bearing labels are deterministic-verifier labels, humans confirm every Claude-derived tag, and no frontier text enters the corpus. This is a defensible posture, not a court-tested one; counsel (BBLAW) should sanity-check the framing once, briefly.&lt;br /&gt;
* &amp;#039;&amp;#039;LoRA ceiling.&amp;#039;&amp;#039; Correction-pattern LoRAs will not make a 32B model a Mythos-class reasoner. That is fine — the Directed Execution economics never asked it to. The 5% burst path to frontier APIs remains for genuinely hard problems, in the process zone where it belongs.&lt;br /&gt;
* &amp;#039;&amp;#039;Curation labor.&amp;#039;&amp;#039; The pipeline lives or dies on logging discipline and intern throughput. Hence §6.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 6. Call to Action ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;This week&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;CEO/CISO-DPO:&amp;#039;&amp;#039;&amp;#039; ratify the Frontier-Token Quarantine as policy (one page, references the transcription-tool memo as precedent for &amp;quot;approved-tool&amp;quot; governance style).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Sysadmin + Carl:&amp;#039;&amp;#039;&amp;#039; stand up the dataset Forgejo org, SQLite trajectory schema, and the &amp;lt;code&amp;gt;frontier_tokens_present&amp;lt;/code&amp;gt; pre-merge check. Half a day of work; it makes the policy mechanical.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Devs:&amp;#039;&amp;#039;&amp;#039; switch OpenCode local-agent sessions to full trajectory logging &amp;#039;&amp;#039;now&amp;#039;&amp;#039;, even before curation starts. Every unlogged failure this month is discarded gold.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Weeks 2–4&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Interns (all, not just dev interns):&amp;#039;&amp;#039;&amp;#039; first curation objectives issued — assemble 50 verified pairs each from live failure logs, PR&amp;#039;d to the dataset repo. The curriculum &amp;#039;&amp;#039;is&amp;#039;&amp;#039; the loop: they learn spec-reading, verifier evidence, and provenance hygiene simultaneously. Scoreboard: pairs merged, review-pass rate.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Team C liaison:&amp;#039;&amp;#039;&amp;#039; map the AGV negative-information logging schema onto the manifest in §4.3 so robotics and software share one provenance convention.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;BBLAW (existing engagement):&amp;#039;&amp;#039;&amp;#039; 30-minute review of the quarantine framing and the judge-signal question. Not a new engagement — an agenda item.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Month 2–3&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# First LoRA run on the coding domain once ≥500 pairs verified. Evaluate on held-out failure set. Publish results internally — win or lose, the eval harness itself is a durable asset.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Decision gate:&amp;#039;&amp;#039;&amp;#039; if tuned executor beats base on first-pass acceptance, promote it in the Directed Execution rotation and begin domain #2 (ERPNext customization is the obvious candidate — our failure data there is uniquely ours).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 7. The Strategic Frame ==&lt;br /&gt;
&lt;br /&gt;
Two tracks, different clock speeds, one direction:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Skills (fast, instant transfer):&amp;#039;&amp;#039;&amp;#039; capability as &amp;#039;&amp;#039;instructions&amp;#039;&amp;#039;, portable across any executor, already running. Survives blackouts by construction.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Weights (slow, compounding):&amp;#039;&amp;#039;&amp;#039; capability as &amp;#039;&amp;#039;parameters we own&amp;#039;&amp;#039;, grown exclusively from our own error distribution, legally unencumbered because the corpus never contained a frontier token.&lt;br /&gt;
&lt;br /&gt;
Claude&amp;#039;s highest-value role in both is the same: not as the source of answers to memorize, but as the intelligence that designs the tests, reads the failures, and sharpens the questions — while our models, our people, and our verifiers author every byte we will ever train on.&lt;br /&gt;
&lt;br /&gt;
The Fable ban gave us the precedent. The error logs give us the data. The quarantine gives us the clean title.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;The error is the gold. Log everything.&amp;#039;&amp;#039;&lt;/div&gt;</description>
			<pubDate>Wed, 15 Jul 2026 15:21:51 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:De-Risk:_Sovereign_Training_Data_v0.1</comments>
		</item>
		<item>
			<title>Main Page</title>
			<link>https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=262&amp;oldid=258</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Main_Page&amp;diff=262&amp;oldid=258</guid>
			<description>&lt;p&gt;Add Directed Execution article link&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:02, 15 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l58&quot;&gt;Line 58:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 58:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[OpenCode Multi-Provider Configuration Guide 260401]] — Dual-mode AI coding setup with Kimi cloud + Ollama local models via Distrobox&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[OpenCode Multi-Provider Configuration Guide 260401]] — Dual-mode AI coding setup with Kimi cloud + Ollama local models via Distrobox&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[PAD-Driven ERPNext Strategy 260303]] — Procedural Agentic Development for Frappe/ERPNext configuration and deployment&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[PAD-Driven ERPNext Strategy 260303]] — Procedural Agentic Development for Frappe/ERPNext configuration and deployment&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Directed Execution: Token-Efficient Agent Development Process]] — Director/Executor/Checker loop and skill distillation for token-efficient agent development (v0.1, 2026-07-15)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/div&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key database:diff:1.41:old-258:rev-262:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 15 Jul 2026 11:02:55 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Main_Page</comments>
		</item>
		<item>
			<title>Directed Execution: Token-Efficient Agent Development Process</title>
			<link>https://mediawiki.comfac.net/index.php?title=Directed_Execution:_Token-Efficient_Agent_Development_Process&amp;diff=261&amp;oldid=0</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Directed_Execution:_Token-Efficient_Agent_Development_Process&amp;diff=261&amp;oldid=0</guid>
			<description>&lt;p&gt;Add Directed Execution: Token-Efficient Agent Development Process v0.1&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Directed Execution: Token-Efficient Agent Development Process =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CGG IT — Process &amp;amp; Skillset Definition v0.1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Owner: JCA · Status: Draft for team review · Date: 2026-07-15&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== 1. Problem Statement ==&lt;br /&gt;
&lt;br /&gt;
Developers are consuming Claude Sonnet and Opus tokens for raw code generation. This inverts the economics of the model market. Frontier-model output tokens are the single most expensive resource in the stack (Opus 4.8 output: ₱1,450/M; Fable 5: ₱2,900/M), while commodity-model output is nearly free by comparison (DeepSeek V4 Flash: ₱16/M — a 90× to 180× spread). Meanwhile, frontier-model &amp;#039;&amp;#039;input&amp;#039;&amp;#039; tokens are roughly 5× cheaper than their own output tokens, and cache hits cheaper still.&lt;br /&gt;
&lt;br /&gt;
The consequence is a simple design rule that the current workflow violates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Expensive models should read a lot and write a little. Cheap models should write a lot and be corrected.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nobody has directed the developers to work this way, and there is no shared mechanism for making the cheap models better over time. Both gaps are addressed here: a role-separated loop for day-to-day work, and a skill system that converts QA corrections into reusable capability for the cheap agents.&lt;br /&gt;
&lt;br /&gt;
== 2. Economic Rationale (worked example) ==&lt;br /&gt;
&lt;br /&gt;
Assume a typical feature task: ~30K tokens of relevant context, ~50K tokens of generated code and tests.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Current pattern — Opus does everything:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
30K in (₱8.70) + 50K out (₱72.50), plus one revision cycle of similar size ≈ &amp;#039;&amp;#039;&amp;#039;₱150–160 per task&amp;#039;&amp;#039;&amp;#039;, with no independent QA gate.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Directed pattern:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step !! Model !! Tokens !! Cost&lt;br /&gt;
|-&lt;br /&gt;
| Plan + FRD || Opus 4.8 || 30K in / 2K out || ₱11.60&lt;br /&gt;
|-&lt;br /&gt;
| Execute || DS V4 Flash || 35K in / 50K out || ₱1.08&lt;br /&gt;
|-&lt;br /&gt;
| QA review || Opus 4.8 || 60K in / 1K out || ₱18.85&lt;br /&gt;
|-&lt;br /&gt;
| Correction || DS V4 Flash || 40K in / 20K out || ₱0.64&lt;br /&gt;
|-&lt;br /&gt;
| Re-check || Opus 4.8 (cached ctx) || 25K in / 0.5K out || ~₱8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Total&amp;#039;&amp;#039;&amp;#039; || &amp;#039;&amp;#039;&amp;#039;≈ ₱40&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Roughly a 70–75% cost reduction &amp;#039;&amp;#039;while adding a QA gate that did not previously exist&amp;#039;&amp;#039;. The QA read is the largest line item, which is correct — that is where the intelligence is actually needed. Substituting Sonnet as the checker for routine tasks pushes the total under ₱20. As skills accumulate and first-pass acceptance rises, the correction cycle amortizes toward zero.&lt;br /&gt;
&lt;br /&gt;
The point is not merely savings. It is that &amp;#039;&amp;#039;&amp;#039;judgment and volume are different products&amp;#039;&amp;#039;&amp;#039;, and we have been buying volume at judgment prices.&lt;br /&gt;
&lt;br /&gt;
== 3. Principles ==&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Direction is the deliverable of intelligence.&amp;#039;&amp;#039;&amp;#039; The frontier model&amp;#039;s job is decomposition, constraints, acceptance criteria, and verdicts — all short, dense outputs. If Claude is emitting more than ~2K tokens on a task, something is misrouted.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Deterministic-first, same as Synopsis.&amp;#039;&amp;#039;&amp;#039; Anything checkable by a linter, test suite, type checker, or script never reaches a paid model. Machine checks run before Claude sees the diff.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Every correction is an asset.&amp;#039;&amp;#039;&amp;#039; A QA correction consumed once is an expense; distilled into a skill, it is capital. The loop is not complete until the correction is either distilled or explicitly judged one-off.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Cheap agents are pushed, not babysat.&amp;#039;&amp;#039;&amp;#039; Executors get hard objectives with clear acceptance criteria and their accumulated skill library — not hand-holding. Failures are information for the skill system.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;The loop is the curriculum.&amp;#039;&amp;#039;&amp;#039; Interns learn the same process the agents run: plan, execute, check, correct, distill. Team-wide token efficiency is a literacy goal, not a dev-only optimization.&lt;br /&gt;
&lt;br /&gt;
== 4. Roles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Role !! Model tier !! Reads !! Writes !! Output budget&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Director&amp;#039;&amp;#039;&amp;#039; || Claude Opus / Fable || Objective, codebase context, skill index || FRD: decomposition, interfaces, acceptance criteria, risks || ≤ 2K tokens&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Executor&amp;#039;&amp;#039;&amp;#039; || DS V4 Flash, Kimi K2.6; later local Qwen/DeepSeek via OpenCode || FRD + relevant skills + code context || Code, tests, migration scripts — full volume || Unbounded&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Checker&amp;#039;&amp;#039;&amp;#039; || Claude Opus (critical) / Sonnet (routine) || Full diff + FRD + machine-check results || Verdict: PASS/FAIL per acceptance criterion, itemized corrections anchored to lines || ≤ 1K tokens&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Skill Librarian&amp;#039;&amp;#039;&amp;#039; || Human (rotating dev/intern) + cheap model drafting || QA correction logs || Skill drafts, skill index maintenance || —&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Director and Checker should be &amp;#039;&amp;#039;&amp;#039;separate sessions&amp;#039;&amp;#039;&amp;#039; even when the same model — the Checker must evaluate against the FRD, not defend its own plan.&lt;br /&gt;
&lt;br /&gt;
Model routing within tiers: DeepSeek V4 Flash is the default executor. Kimi K2.6 when the task needs multimodal input (screenshots, UI review) or its larger instant-mode quality helps. Local agents take over as the vLLM/Ollama stack proves out on benchmarked task classes — the skill library transfers with them, which is the strategic payoff: skills are model-portable capability, not vendor lock-in.&lt;br /&gt;
&lt;br /&gt;
== 5. The Loop ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Plan → Execute → Machine-check → QA → Correct → Distill → Reuse&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Plan.&amp;#039;&amp;#039;&amp;#039; Director receives the objective and produces an FRD-lite (template below). No code beyond interface signatures and test-case &amp;#039;&amp;#039;descriptions&amp;#039;&amp;#039;. The FRD is the contract; ambiguity discovered later is a planning defect and goes back to the Director, not patched silently by the Executor.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Execute.&amp;#039;&amp;#039;&amp;#039; Executor works in OpenCode with the FRD and the relevant skills loaded (skills prepended as a stable prefix — this also maximizes cache hits). It generates code and tests to satisfy the acceptance criteria. It may burn tokens freely; that is what it is for.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Machine-check.&amp;#039;&amp;#039;&amp;#039; Lint, type-check, test run, formatter. Automated (n8n or a pre-commit script). Failures loop back to the Executor without any paid QA read. Claude never reviews code that fails machine checks.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;QA.&amp;#039;&amp;#039;&amp;#039; Checker reads FRD + diff + machine-check results and returns a structured verdict. It does not rewrite code. Each FAIL item states &amp;#039;&amp;#039;what is wrong, why, and the principle violated&amp;#039;&amp;#039; — the &amp;quot;why&amp;quot; is raw material for distillation.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Correct.&amp;#039;&amp;#039;&amp;#039; Executor applies corrections. Two correction cycles maximum; a third failure escalates to a human plus a mandatory skill-gap review (&amp;quot;what skill would have prevented this?&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Distill.&amp;#039;&amp;#039;&amp;#039; Weekly, the Skill Librarian reviews the QA correction log. Any correction pattern appearing &amp;#039;&amp;#039;&amp;#039;twice or more&amp;#039;&amp;#039;&amp;#039; becomes a skill candidate. A cheap model drafts the skill from the correction transcripts; a human reviews and merges it into the Forgejo skill repo.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Reuse.&amp;#039;&amp;#039;&amp;#039; Skills are indexed by trigger. The Director&amp;#039;s FRD names which skills apply; the Executor loads them. Cheap agents therefore climb: yesterday&amp;#039;s correction is today&amp;#039;s default behavior.&lt;br /&gt;
&lt;br /&gt;
== 6. Deliverable Contracts ==&lt;br /&gt;
&lt;br /&gt;
=== FRD-lite (Director output) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
FRD-&amp;lt;seq&amp;gt;: &amp;lt;title&amp;gt;&lt;br /&gt;
Objective: one sentence.&lt;br /&gt;
Scope in / Scope out: explicit exclusions.&lt;br /&gt;
Interfaces: function/API signatures the Executor must implement.&lt;br /&gt;
Acceptance criteria: numbered, each machine- or QA-checkable.&lt;br /&gt;
Constraints: security, style, dependency, and performance rules that apply.&lt;br /&gt;
Skills to load: skill IDs from the index.&lt;br /&gt;
Risk notes: where the Executor is most likely to go wrong.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== QA Verdict (Checker output) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
VERDICT: PASS | FAIL&lt;br /&gt;
AC-1: PASS/FAIL — &amp;lt;one line&amp;gt;&lt;br /&gt;
AC-n: ...&lt;br /&gt;
Corrections (if FAIL):&lt;br /&gt;
  C1 [file:line] What / Why / Principle violated&lt;br /&gt;
Distill flags: corrections likely to recur → candidate skill name&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Principle violated&amp;quot; field is deliberately mandatory. It is what makes the verdict distillable rather than a one-off patch instruction.&lt;br /&gt;
&lt;br /&gt;
== 7. The Skill System ==&lt;br /&gt;
&lt;br /&gt;
A skill is a short markdown file teaching a cheap model a specific competence, in the same shape Anthropic uses for Claude skills — which means skills built here also work when the executor &amp;#039;&amp;#039;is&amp;#039;&amp;#039; Claude, or a local model, or whatever comes next.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Format&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;SKILL.md&amp;lt;/code&amp;gt; per skill, one directory per skill in the Forgejo repo, e.g. &amp;lt;code&amp;gt;skills/erpnext-patch-migrations/&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
name: &amp;lt;kebab-case&amp;gt;&lt;br /&gt;
trigger: when this skill applies (used by Director for routing)&lt;br /&gt;
procedure: numbered steps / rules&lt;br /&gt;
examples: one good, one bad (drawn from real QA corrections)&lt;br /&gt;
anti-patterns: the specific failures that birthed this skill&lt;br /&gt;
provenance: FRD/QA references, author, date&lt;br /&gt;
status: draft | reviewed | adopted | deprecated&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lifecycle.&amp;#039;&amp;#039;&amp;#039; Draft (from correction log, cheap-model-written) → Reviewed (human, PR in Forgejo) → Adopted (in the index, loadable) → Deprecated (superseded or model-obsoleted). Skills are versioned like code because they are code — for the agents.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ownership.&amp;#039;&amp;#039;&amp;#039; Devs are consumers and reviewers, not the bottleneck. Interns, working with the local DS agents in OpenCode, author most drafts as part of their objectives. The repo&amp;#039;s PR history doubles as an intern portfolio.&lt;br /&gt;
&lt;br /&gt;
== 8. Escalation Rules ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Situation !! Route&lt;br /&gt;
|-&lt;br /&gt;
| Routine feature/bugfix, skills exist || Flash executes, Sonnet checks&lt;br /&gt;
|-&lt;br /&gt;
| Novel architecture, security-sensitive, cross-system design || Opus/Fable plans and checks&lt;br /&gt;
|-&lt;br /&gt;
| Executor fails 2 correction cycles || Human review + skill-gap analysis&lt;br /&gt;
|-&lt;br /&gt;
| Executor requests clarification || Back to Director (cheap→expensive calls are Director-mediated, never ad hoc)&lt;br /&gt;
|-&lt;br /&gt;
| Anything touching secrets, credentials, prod data || Local agents only; no external API&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last row is a hard rule and aligns with the transcription-tool memo posture: sensitive context stays on the ZeroTier overlay.&lt;br /&gt;
&lt;br /&gt;
== 9. Metrics &amp;amp; Token Ledger ==&lt;br /&gt;
&lt;br /&gt;
Per task, logged (SQLite to start, consistent with the Synopsis MVP philosophy; ERPNext later if it earns its keep):&lt;br /&gt;
&lt;br /&gt;
* Tokens and ₱ by role (Director / Executor / Checker), per task and per week.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;First-pass acceptance rate&amp;#039;&amp;#039;&amp;#039; — the headline metric. Rising FPA means skills are working.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Correction cycles per task&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;escalation rate&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Skill reuse count&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;skills authored&amp;#039;&amp;#039;&amp;#039; per person — the intern scoreboard.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Cost per merged deliverable&amp;#039;&amp;#039;&amp;#039;, trended. Target: sustained &amp;lt;30% of the all-frontier baseline within one quarter.&lt;br /&gt;
&lt;br /&gt;
The ledger is not surveillance; it is the feedback signal that tells us when a task class is ready to move from Flash to a local model, and when a checker can be downgraded from Opus to Sonnet.&lt;br /&gt;
&lt;br /&gt;
== 10. Rollout ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Week 1 — Instrument and declare.&amp;#039;&amp;#039;&amp;#039; Stand up the skill repo in Forgejo, the token ledger, and the machine-check gate. Short directive to the team: no frontier-model code generation for tasks with an FRD path; frontier models plan and check.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Week 2 — Seed skills.&amp;#039;&amp;#039;&amp;#039; Mine the last month of Claude chat history for recurring correction patterns; interns draft the first 5–10 skills (likely candidates: ERPNext patch conventions, Frappe API idioms, our lint/commit standards, test scaffolding).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Week 3 — First directed sprints.&amp;#039;&amp;#039;&amp;#039; Each intern gets one challenging objective run fully through the loop with a local DS agent in OpenCode. Devs act as Skill Librarian reviewers. Every completed objective must ship at least one skill PR.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Week 4 — Review.&amp;#039;&amp;#039;&amp;#039; FPA, cost per deliverable, and skill count reviewed against baseline. Decide the first task class to pilot on fully local models.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Steady state.&amp;#039;&amp;#039;&amp;#039; The loop is the standard operating rhythm. Quarterly, revisit model routing (the pricing table this document was built from will be stale in months) and prune deprecated skills.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Reasoning summary: the spread between frontier output pricing and commodity output pricing (90×+) makes &amp;quot;smart model writes code&amp;quot; the single most expensive habit in the workflow, while the input/output asymmetry (5×) makes &amp;quot;smart model reads everything, writes verdicts&amp;quot; nearly free by comparison. The skill system converts the residual cost — QA corrections — into permanent, model-portable capability, so the cheap tier&amp;#039;s quality compounds and the expensive tier&amp;#039;s involvement shrinks over time. Interns are the labor force and the beneficiaries of the same loop.&amp;#039;&amp;#039;&lt;/div&gt;</description>
			<pubDate>Wed, 15 Jul 2026 11:02:54 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Directed_Execution:_Token-Efficient_Agent_Development_Process</comments>
		</item>
		<item>
			<title>Tutorial: Exposing a Dockerized Web App via NPM Direct DB Config</title>
			<link>https://mediawiki.comfac.net/index.php?title=Tutorial:_Exposing_a_Dockerized_Web_App_via_NPM_Direct_DB_Config&amp;diff=260&amp;oldid=0</link>
			<guid isPermaLink="false">https://mediawiki.comfac.net/index.php?title=Tutorial:_Exposing_a_Dockerized_Web_App_via_NPM_Direct_DB_Config&amp;diff=260&amp;oldid=0</guid>
			<description>&lt;p&gt;Uploaded tutorial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #e7f3fe; border-left: 6px solid #2196F3; padding: 15px; margin-bottom: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Tutorial:&amp;lt;/strong&amp;gt; Exposing a Dockerized Web App via NPM Direct DB Config&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Audience:&amp;lt;/strong&amp;gt; Self-hosters who need to publish a Dockerized service through Nginx Proxy Manager without admin-panel credentials.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;strong&amp;gt;Last updated:&amp;lt;/strong&amp;gt; 2026-07-11&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= My Dockerized Web App — NPM Proxy Host Setup (Direct DB Method) =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Scope:&amp;#039;&amp;#039;&amp;#039; Expose a Dockerized internal web application through Nginx Proxy Manager (NPM) on &amp;lt;docker-host&amp;gt; without using the NPM Admin UI, because NPM admin-panel credentials are not stored in the BRC credential store.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Outcome:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;http://app.example.org&amp;lt;/code&amp;gt; resolves to the analyzer on &amp;lt;docker-host&amp;gt; (&amp;lt;code&amp;gt;&amp;lt;npm-host-zerotier-ip&amp;gt;:&amp;lt;app-port&amp;gt;&amp;lt;/code&amp;gt;) via NPM proxy host &amp;lt;code&amp;gt;&amp;lt;proxy-host-id&amp;gt;&amp;lt;/code&amp;gt;. HTTPS is pending the manual SSL-certificate step in the NPM UI.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== What You Need ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Item&lt;br /&gt;
! Value / Location&lt;br /&gt;
|-&lt;br /&gt;
| Target domain&lt;br /&gt;
| &amp;lt;code&amp;gt;app.example.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Backing service&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;npm-host-zerotier-ip&amp;gt;:&amp;lt;app-port&amp;gt;&amp;lt;/code&amp;gt; (&amp;lt;docker-host&amp;gt; ZeroTier, &amp;lt;code&amp;gt;myapp&amp;lt;/code&amp;gt; container)&lt;br /&gt;
|-&lt;br /&gt;
| NPM host&lt;br /&gt;
| &amp;lt;docker-host&amp;gt; (&amp;lt;code&amp;gt;&amp;lt;npm-host-local-ip&amp;gt;&amp;lt;/code&amp;gt; local / &amp;lt;code&amp;gt;&amp;lt;npm-host-zerotier-ip&amp;gt;&amp;lt;/code&amp;gt; ZeroTier)&lt;br /&gt;
|-&lt;br /&gt;
| NPM DB container&lt;br /&gt;
| &amp;lt;code&amp;gt;nginx-proxy-manager-db&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NPM app container&lt;br /&gt;
| &amp;lt;code&amp;gt;nginx-proxy-manager-app&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| NPM DB credentials&lt;br /&gt;
| &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; (hardcoded in NPM stack)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;docker-host&amp;gt; SSH credentials&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;credential-store&amp;gt;/&amp;lt;docker-host&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Tooling on the agent side&lt;br /&gt;
| &amp;lt;code&amp;gt;sshpass&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;command -v sshpass&amp;lt;/code&amp;gt; to verify)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 1 — Deploy the Application ==&lt;br /&gt;
&lt;br /&gt;
The analyzer runs as a Docker Compose stack on &amp;lt;docker-host&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# On &amp;lt;docker-host&amp;gt;&lt;br /&gt;
/opt/myapp/docker compose up -d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It exposes host port &amp;lt;code&amp;gt;&amp;lt;app-port&amp;gt;&amp;lt;/code&amp;gt; and has a one-minute cron sync that pulls &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; and restarts the container when the repo changes.&lt;br /&gt;
&lt;br /&gt;
Verify it responds locally:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl http://127.0.0.1:&amp;lt;app-port&amp;gt;/api/health&lt;br /&gt;
# expected: {&amp;quot;status&amp;quot;:&amp;quot;ok&amp;quot;,&amp;quot;authenticated&amp;quot;:false}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 2 — Set Up the SSH Helper ==&lt;br /&gt;
&lt;br /&gt;
From the workspace, load &amp;lt;docker-host&amp;gt; credentials from BRC and define a one-line SSH wrapper:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WORKDIR=$(git rev-parse --show-toplevel 2&amp;gt;/dev/null || pwd)&lt;br /&gt;
BRC=&amp;quot;$WORKDIR/&amp;lt;credential-store&amp;gt;/&amp;lt;docker-host&amp;gt;&amp;quot;&lt;br /&gt;
PASS=$(grep &amp;#039;password:&amp;#039; &amp;quot;$BRC&amp;quot; | awk &amp;#039;{print $NF}&amp;#039;)&lt;br /&gt;
HOST=$(grep &amp;#039;zerotier_ip:&amp;#039; &amp;quot;$BRC&amp;quot; | awk &amp;#039;{print $NF}&amp;#039;)&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_USER=$(grep -m1 &amp;#039;user:&amp;#039; &amp;quot;$BRC&amp;quot; | awk &amp;#039;{print $NF}&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH() {&lt;br /&gt;
  sshpass -p &amp;quot;$PASS&amp;quot; ssh \&lt;br /&gt;
    -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \&lt;br /&gt;
    &amp;quot;$&amp;lt;docker-host&amp;gt;_USER@$HOST&amp;quot; &amp;quot;$@&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;code&amp;gt;sshpass&amp;lt;/code&amp;gt; is missing, install it first (&amp;lt;code&amp;gt;apt-get install -y sshpass&amp;lt;/code&amp;gt; or equivalent). Do &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; treat a missing &amp;lt;code&amp;gt;sshpass&amp;lt;/code&amp;gt; as &amp;quot;no SSH access.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 3 — Check for Existing Hosts ==&lt;br /&gt;
&lt;br /&gt;
List any existing proxy host that uses the target domain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker exec nginx-proxy-manager-db mysql -unpm -pnpm -h127.0.0.1 npm -e \\&amp;quot;&lt;br /&gt;
  SELECT id, domain_names, forward_host, forward_port, enabled&lt;br /&gt;
  FROM proxy_host&lt;br /&gt;
  WHERE domain_names LIKE &amp;#039;%app.example.org%&amp;#039; AND is_deleted=0;&lt;br /&gt;
\\&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a row exists but points to the wrong target, update it or delete it before inserting a duplicate.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 4 — Back Up the &amp;lt;code&amp;gt;proxy_host&amp;lt;/code&amp;gt; Table ==&lt;br /&gt;
&lt;br /&gt;
Always backup before writing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker exec nginx-proxy-manager-db mysqldump -unpm -pnpm -h127.0.0.1 npm proxy_host&amp;quot; \&lt;br /&gt;
  &amp;gt; &amp;quot;/tmp/npm-proxy-host-backup-$(date +%Y%m%d-%H%M%S).sql&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; Use &amp;lt;code&amp;gt;-h127.0.0.1&amp;lt;/code&amp;gt;; the default socket connection may reject the &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; user.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 5 — Insert the Proxy Host Row ==&lt;br /&gt;
&lt;br /&gt;
Insert an HTTP-only row (&amp;lt;code&amp;gt;certificate_id=0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ssl_forced=0&amp;lt;/code&amp;gt;). SSL is requested later from the NPM UI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DOMAIN=&amp;quot;app.example.org&amp;quot;&lt;br /&gt;
TARGET_IP=&amp;quot;&amp;lt;npm-host-zerotier-ip&amp;gt;&amp;quot;&lt;br /&gt;
TARGET_PORT=&amp;quot;&amp;lt;app-port&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker exec nginx-proxy-manager-db mysql -unpm -pnpm -h127.0.0.1 npm -e \\&amp;quot;&lt;br /&gt;
INSERT INTO proxy_host&lt;br /&gt;
  (created_on, modified_on, owner_user_id, domain_names, forward_host, forward_port,&lt;br /&gt;
   access_list_id, certificate_id, ssl_forced, caching_enabled, block_exploits,&lt;br /&gt;
   advanced_config, meta, allow_websocket_upgrade, http2_support, forward_scheme, enabled, locations,&lt;br /&gt;
   hsts_enabled, hsts_subdomains, trust_forwarded_proto)&lt;br /&gt;
VALUES&lt;br /&gt;
  (NOW(), NOW(), 1, &amp;#039;[\\\\\&amp;quot;${DOMAIN}\\\\\&amp;quot;]&amp;#039;, &amp;#039;${TARGET_IP}&amp;#039;, ${TARGET_PORT},&lt;br /&gt;
   0, 0, 0, 0, 0,&lt;br /&gt;
   &amp;#039;&amp;#039;,&lt;br /&gt;
   &amp;#039;{\\\\\&amp;quot;nginx_online\\\\\&amp;quot;:true,\\\\\&amp;quot;nginx_err\\\\\&amp;quot;:null}&amp;#039;,&lt;br /&gt;
   0, 0, &amp;#039;http&amp;#039;, 1, &amp;#039;[]&amp;#039;,&lt;br /&gt;
   0, 0, 0);&lt;br /&gt;
\\&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Record the &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt; returned by the next SELECT; for this host it is &amp;lt;code&amp;gt;&amp;lt;proxy-host-id&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 6 — Archive Any Manual Config File ==&lt;br /&gt;
&lt;br /&gt;
If a previous workaround created a hand-edited &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; file in &amp;lt;code&amp;gt;/data/compose/3/data/nginx/proxy_host/&amp;lt;/code&amp;gt;, move it out of nginx&amp;#039;s include path so it does not conflict with the DB-generated config. The proxy_host directory is owned by root, so use a privileged throwaway container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker run --rm \&lt;br /&gt;
  -v /data/compose/3/data/nginx/proxy_host:/proxy \&lt;br /&gt;
  alpine sh -c &amp;#039;test -f /proxy/&amp;lt;manual-config&amp;gt;.conf &amp;amp;&amp;amp; mv /proxy/&amp;lt;manual-config&amp;gt;.conf /proxy/&amp;lt;manual-config&amp;gt;.conf.manual-backup-$(date +%Y%m%d-%H%M%S) || true&amp;#039;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 7 — Restart the NPM App Container ==&lt;br /&gt;
&lt;br /&gt;
Restarting regenerates the nginx configs from the DB:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker restart nginx-proxy-manager-app&amp;quot;&lt;br /&gt;
sleep 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 8 — Force Config Generation If Needed ==&lt;br /&gt;
&lt;br /&gt;
Direct DB inserts create the row, but NPM&amp;#039;s internal config generator may not write &amp;lt;code&amp;gt;proxy_host/&amp;lt;id&amp;gt;.conf&amp;lt;/code&amp;gt; until the host is created or updated through the app. If the config file is missing, force it from inside the app container:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HOST_ID=&amp;lt;proxy-host-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker exec nginx-proxy-manager-app sh -c &amp;#039;cat &amp;gt; /tmp/regen-proxy-host.mjs &amp;lt;&amp;lt;EOF&lt;br /&gt;
import proxyHostModel from \\&amp;quot;/app/models/proxy_host.js\\&amp;quot;;&lt;br /&gt;
import internalNginx from \\&amp;quot;/app/internal/nginx.js\\&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
const host = await proxyHostModel.query().where(\\&amp;quot;id\\&amp;quot;, ${HOST_ID}).first();&lt;br /&gt;
if (!host) {&lt;br /&gt;
  console.error(\\&amp;quot;proxy_host ${HOST_ID} not found\\&amp;quot;);&lt;br /&gt;
  process.exit(1);&lt;br /&gt;
}&lt;br /&gt;
await internalNginx.configure(proxyHostModel, \\&amp;quot;proxy_host\\&amp;quot;, host);&lt;br /&gt;
console.log(\\&amp;quot;Regenerated config for\\&amp;quot;, host.domain_names);&lt;br /&gt;
EOF&lt;br /&gt;
node /tmp/regen-proxy-host.mjs&amp;#039;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This writes the config file, tests nginx, updates the row&amp;#039;s &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt;, and reloads nginx.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 9 — Verify ==&lt;br /&gt;
&lt;br /&gt;
Check the generated config:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;ls -la /data/compose/3/data/nginx/proxy_host/&amp;lt;proxy-host-id&amp;gt;.conf&amp;quot;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;cat /data/compose/3/data/nginx/proxy_host/&amp;lt;proxy-host-id&amp;gt;.conf&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test nginx syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;docker exec nginx-proxy-manager-app nginx -t&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test end-to-end HTTP (from &amp;lt;docker-host&amp;gt;, because public DNS may not be live yet):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;docker-host&amp;gt;_SSH &amp;quot;curl -fsS -H &amp;#039;Host: app.example.org&amp;#039; http://127.0.0.1:80/api/health&amp;quot;&lt;br /&gt;
# expected: {&amp;quot;status&amp;quot;:&amp;quot;ok&amp;quot;,&amp;quot;authenticated&amp;quot;:false}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once Cloudflare DNS points &amp;lt;code&amp;gt;app.example.org&amp;lt;/code&amp;gt; at the &amp;lt;vps-relay&amp;gt; VPS relay, &amp;lt;code&amp;gt;http://app.example.org/&amp;lt;/code&amp;gt; will work publicly.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Step 10 — Request the SSL Certificate (Manual NPM UI Step) ==&lt;br /&gt;
&lt;br /&gt;
A DB insert cannot complete an ACME DNS-01 challenge. The final certificate step must be done in the NPM Admin UI:&lt;br /&gt;
&lt;br /&gt;
# Open &amp;lt;code&amp;gt;http://&amp;lt;npm-host-zerotier-ip&amp;gt;:81&amp;lt;/code&amp;gt; (&amp;lt;docker-host&amp;gt; ZeroTier) or your NPM admin URL.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Hosts → Proxy Hosts&amp;#039;&amp;#039;&amp;#039; → click &amp;lt;code&amp;gt;app.example.org&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Go to the &amp;#039;&amp;#039;&amp;#039;SSL&amp;#039;&amp;#039;&amp;#039; tab.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;SSL Certificate → Request a new SSL Certificate&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# Enable &amp;#039;&amp;#039;&amp;#039;Force SSL&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;HTTP/2 Support&amp;#039;&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;&amp;#039;HSTS&amp;#039;&amp;#039;&amp;#039; as desired.&lt;br /&gt;
# Agree to the Let&amp;#039;s Encrypt ToS and request the certificate.&lt;br /&gt;
&lt;br /&gt;
After the certificate issues, NPM updates &amp;lt;code&amp;gt;proxy_host.certificate_id&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ssl_forced&amp;lt;/code&amp;gt; automatically and regenerates &amp;lt;code&amp;gt;&amp;lt;proxy-host-id&amp;gt;.conf&amp;lt;/code&amp;gt; with HTTPS listeners.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Symptom&lt;br /&gt;
! Cause&lt;br /&gt;
! Fix&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Access denied for user &amp;#039;npm&amp;#039;@&amp;#039;localhost&amp;#039;&amp;lt;/code&amp;gt; during backup&lt;br /&gt;
| &amp;lt;code&amp;gt;mysqldump&amp;lt;/code&amp;gt; used socket instead of TCP&lt;br /&gt;
| Add &amp;lt;code&amp;gt;-h127.0.0.1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Row exists but no &amp;lt;code&amp;gt;&amp;lt;id&amp;gt;.conf&amp;lt;/code&amp;gt; after restart&lt;br /&gt;
| Direct DB insert did not trigger config generator&lt;br /&gt;
| Run the Node force-regeneration script in Step 8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nginx: [emerg] duplicate server_name&amp;lt;/code&amp;gt;&lt;br /&gt;
| Old manual &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; still in &amp;lt;code&amp;gt;proxy_host/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Archive/remove it with a privileged container (Step 6)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt; returns 404 or no response&lt;br /&gt;
| DNS not pointing at NPM yet, or wrong &amp;lt;code&amp;gt;forward_host&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;forward_port&amp;lt;/code&amp;gt;&lt;br /&gt;
| Verify DNS A record and the &amp;lt;code&amp;gt;proxy_host&amp;lt;/code&amp;gt; row&lt;br /&gt;
|-&lt;br /&gt;
| Cert request fails&lt;br /&gt;
| Let&amp;#039;s Encrypt rate limit or Cloudflare API token missing&lt;br /&gt;
| Check NPM SSL logs; use the unpause link if rate-limited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Reusable NPM direct-DB skill: &amp;lt;code&amp;gt;tools/IT-knowledge/skills/npm-direct-db-modification/SKILL.md&amp;lt;/code&amp;gt;&lt;br /&gt;
* Analyzer repo: &amp;lt;code&amp;gt;&amp;lt;your-app-repo&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* NPM Proxy Map in orientation: &amp;lt;code&amp;gt;&amp;lt;orientation-doc&amp;gt;.md&amp;lt;/code&amp;gt; § Published Sites&lt;br /&gt;
* Cloudflare/VPS relay notes: &amp;lt;code&amp;gt;tools/IT-knowledge/networking/NPM_Migration_to_Homelab_VPS_Relay_260401.mw&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorial]]&lt;br /&gt;
[[Category:Nginx Proxy Manager]]&lt;br /&gt;
[[Category:Docker]]&lt;br /&gt;
[[Category:DevOps]]&lt;/div&gt;</description>
			<pubDate>Sat, 11 Jul 2026 12:56:50 GMT</pubDate>
			<dc:creator>Justinaquino</dc:creator>
			<comments>https://mediawiki.comfac.net/index.php/Talk:Tutorial:_Exposing_a_Dockerized_Web_App_via_NPM_Direct_DB_Config</comments>
		</item>
</channel></rss>