<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://edfieldmanual.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AFleetCarriers</id>
	<title>Module:FleetCarriers - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://edfieldmanual.com/index.php?action=history&amp;feed=atom&amp;title=Module%3AFleetCarriers"/>
	<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;action=history"/>
	<updated>2026-08-29T18:42:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;diff=2583&amp;oldid=prev</id>
		<title>Sythan: Fix no-results message: build/hide it via JS instead of relying on the HTML hidden attribute (stripped by Sanitizer) and call applyFilters() once at init</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;diff=2583&amp;oldid=prev"/>
		<updated>2026-08-29T14:00:35Z</updated>

		<summary type="html">&lt;p&gt;Fix no-results message: build/hide it via JS instead of relying on the HTML hidden attribute (stripped by Sanitizer) and call applyFilters() once at init&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&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:00, 29 August 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-l326&quot;&gt;Line 326:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 326:&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;	local out = {}&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;	local out = {}&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;	table.insert(out, &amp;#039;&amp;lt;div id=&amp;quot;edfm-fc-directory&amp;quot; class=&amp;quot;edfm-fc-directory&amp;quot;&amp;gt;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	table.insert(out, &amp;#039;&amp;lt;div id=&amp;quot;edfm-fc-directory&amp;quot; class=&amp;quot;edfm-fc-directory&amp;quot;&amp;gt;&amp;#039;)&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 &quot;no results&quot; message is deliberately NOT emitted here. It only&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;	-- ever needs to exist once JS-driven filtering is possible, so&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;	-- MediaWiki:Common.js creates and hides it itself alongside the&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;	-- toolbar controls -- avoids depending on the HTML `hidden` boolean&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;	-- attribute surviving Sanitizer (it doesn&#039;t, in this MW config), and&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;	-- avoids a permanently-wrong &quot;no systems match&quot; message ever showing&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;	-- to no-JS visitors who have no way to filter it away.&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;	table.insert(out, &amp;#039;&amp;lt;div id=&amp;quot;edfm-fc-toolbar&amp;quot; class=&amp;quot;edfm-fc-toolbar&amp;quot; role=&amp;quot;search&amp;quot; aria-label=&amp;quot;Filter Fleet Carrier Administration systems&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	table.insert(out, &amp;#039;&amp;lt;div id=&amp;quot;edfm-fc-toolbar&amp;quot; class=&amp;quot;edfm-fc-toolbar&amp;quot; role=&amp;quot;search&amp;quot; aria-label=&amp;quot;Filter Fleet Carrier Administration systems&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	table.insert(out, &#039;&amp;lt;p class=&quot;edfm-fc-empty-state&quot; id=&quot;edfm-fc-no-results&quot; hidden&amp;gt;No systems match the current filters.&amp;lt;/p&amp;gt;&#039;)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&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;	table.insert(out, buildGroup(records, &amp;#039;verified&amp;#039;, &amp;#039;Verified&amp;#039;) or &amp;#039;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	table.insert(out, buildGroup(records, &amp;#039;verified&amp;#039;, &amp;#039;Verified&amp;#039;) or &amp;#039;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	table.insert(out, buildGroup(records, &amp;#039;disputed&amp;#039;, &amp;#039;Disputed&amp;#039;) or &amp;#039;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	table.insert(out, buildGroup(records, &amp;#039;disputed&amp;#039;, &amp;#039;Disputed&amp;#039;) or &amp;#039;&amp;#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sythan</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;diff=2581&amp;oldid=prev</id>
		<title>Sythan: Fix data loading: mw.loadData only works for Scribunto-content pages, not JSON pages -- switch to mw.title.new + getContent + jsonDecode, matching Module:Engineers&#039; existing pattern for its JSON records</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;diff=2581&amp;oldid=prev"/>
		<updated>2026-08-29T13:59:33Z</updated>

		<summary type="html">&lt;p&gt;Fix data loading: mw.loadData only works for Scribunto-content pages, not JSON pages -- switch to mw.title.new + getContent + jsonDecode, matching Module:Engineers&amp;#039; existing pattern for its JSON records&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&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:59, 29 August 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-l44&quot;&gt;Line 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 44:&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;end&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;end&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; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local function loadData(&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;title&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- mw.loadData only works for CONTENT_MODEL_SCRIBUNTO pages -- it routes&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ok, data &lt;/del&gt;= &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pcall(&lt;/del&gt;mw.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;loadData&lt;/del&gt;, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;title&lt;/del&gt;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- through require(), whose wiki-page loader explicitly requires&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	if &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ok and type(data) == &#039;table&#039; &lt;/del&gt;then&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- hasContentModel(CONTENT_MODEL_SCRIBUNTO). Module:Data/FleetCarriers/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		return &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;data&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-- Administration is CONTENT_MODEL_JSON, so it has to be fetched and decoded&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;-- directly instead -- same pattern Module:Engineers already uses for its&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;-- own JSON-content-model records (see Module:Engineers, loadRecord).&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;local function loadData(&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pageName&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;	local &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;title &lt;/ins&gt;= mw.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;title.new(pageName&lt;/ins&gt;, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;Module&#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;	if &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;not title &lt;/ins&gt;then&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;		return &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 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;	end&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;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return {}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;local content = title:getContent()&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;	if not content then&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;return {}&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;	end&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;	local ok, data = pcall(mw.text.jsonDecode, content)&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;	if not ok or type(data) ~= &#039;table&#039; then&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;		return {}&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;	end&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;	return data&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;end&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;end&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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l134&quot;&gt;Line 134:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 148:&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;local function loadRecords()&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;local function loadRecords()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local records = loadData(&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Module:&lt;/del&gt;Data/FleetCarriers/Administration&#039;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	local records = loadData(&#039;Data/FleetCarriers/Administration&#039;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	for index, record in ipairs(records) do&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;	for index, record in ipairs(records) do&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;		validateRecord(index, record)&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;		validateRecord(index, record)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sythan</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;diff=2579&amp;oldid=prev</id>
		<title>Sythan: Add Module:FleetCarriers - renders the Fleet Carrier Administration directory, status badges, and Known Data Discrepancies panels from Module:Data/FleetCarriers/Administration</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Module:FleetCarriers&amp;diff=2579&amp;oldid=prev"/>
		<updated>2026-08-29T13:56:34Z</updated>

		<summary type="html">&lt;p&gt;Add Module:FleetCarriers - renders the Fleet Carrier Administration directory, status badges, and Known Data Discrepancies panels from Module:Data/FleetCarriers/Administration&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Module:FleetCarriers&lt;br /&gt;
--&lt;br /&gt;
-- Canonical Fleet Carrier Administration records are stored in:&lt;br /&gt;
-- Module:Data/FleetCarriers/Administration&lt;br /&gt;
--&lt;br /&gt;
-- This module renders the Fleet Carrier Administration directory (search/&lt;br /&gt;
-- filter tool, status-grouped tables, and the Known Data Discrepancies&lt;br /&gt;
-- panels) used on [[Fleet Carrier Administration Systems]].&lt;br /&gt;
--&lt;br /&gt;
-- EDFM does not treat every third-party service flag as confirmed. Each&lt;br /&gt;
-- record carries a status (verified / unverified / disputed / unavailable),&lt;br /&gt;
-- the evidence basis behind that status, and separate sourceCheckedDate /&lt;br /&gt;
-- ingameVerifiedDate fields so a reader can tell an external-database check&lt;br /&gt;
-- apart from a direct in-game test. See Elite Dangerous Field Manual:&lt;br /&gt;
-- Adding Structured Data and Elite Dangerous Field Manual:Source Quality&lt;br /&gt;
-- Guide.&lt;br /&gt;
--&lt;br /&gt;
-- Adding a system:&lt;br /&gt;
--   1. Add a record to Module:Data/FleetCarriers/Administration.&lt;br /&gt;
--   2. status must be one of: verified, unverified, disputed, unavailable.&lt;br /&gt;
--   3. If set, verificationBasis must be one of the keys in&lt;br /&gt;
--      VERIFICATION_BASIS_LABELS below -- add a new one there (with a&lt;br /&gt;
--      short human label) rather than inventing an unlisted value.&lt;br /&gt;
--   4. Unknown status/verificationBasis values raise a visible Lua error&lt;br /&gt;
--      instead of silently rendering -- this is deliberate, see the policy&lt;br /&gt;
--      note on the article talk/edit summary: a typo like &amp;quot;verifed&amp;quot; should&lt;br /&gt;
--      break the page loudly, not get treated as unverified.&lt;br /&gt;
--&lt;br /&gt;
-- Do not fabricate ingameVerifiedDate -- only set it when an EDFM&lt;br /&gt;
-- contributor has actually moved a carrier into the system and checked&lt;br /&gt;
-- Fleet Carrier Management. sourceCheckedDate records when the external&lt;br /&gt;
-- reference data itself was last reviewed, which is a materially weaker&lt;br /&gt;
-- claim.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
-- General helpers&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function isNonEmpty(value)&lt;br /&gt;
	return value ~= nil and value ~= &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function loadData(title)&lt;br /&gt;
	local ok, data = pcall(mw.loadData, title)&lt;br /&gt;
	if ok and type(data) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		return data&lt;br /&gt;
	end&lt;br /&gt;
	return {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Safe insertion into wikitext table cells (mirrors Module:Mining).&lt;br /&gt;
local function esc(value)&lt;br /&gt;
	return mw.text.nowiki(tostring(value or &amp;#039;&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Safe insertion into HTML attribute values (mirrors Module:Engineers).&lt;br /&gt;
local function escapeAttribute(value)&lt;br /&gt;
	if value == nil then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	value = tostring(value)&lt;br /&gt;
	value = value:gsub(&amp;#039;&amp;amp;&amp;#039;, &amp;#039;&amp;amp;amp;&amp;#039;)&lt;br /&gt;
	value = value:gsub(&amp;#039;&amp;quot;&amp;#039;, &amp;#039;&amp;amp;quot;&amp;#039;)&lt;br /&gt;
	value = value:gsub(&amp;#039;&amp;lt;&amp;#039;, &amp;#039;&amp;amp;lt;&amp;#039;)&lt;br /&gt;
	value = value:gsub(&amp;#039;&amp;gt;&amp;#039;, &amp;#039;&amp;amp;gt;&amp;#039;)&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local MONTH_NAMES = {&lt;br /&gt;
	&amp;#039;January&amp;#039;, &amp;#039;February&amp;#039;, &amp;#039;March&amp;#039;, &amp;#039;April&amp;#039;, &amp;#039;May&amp;#039;, &amp;#039;June&amp;#039;,&lt;br /&gt;
	&amp;#039;July&amp;#039;, &amp;#039;August&amp;#039;, &amp;#039;September&amp;#039;, &amp;#039;October&amp;#039;, &amp;#039;November&amp;#039;, &amp;#039;December&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- &amp;quot;2026-08-29&amp;quot; -&amp;gt; &amp;quot;29 August 2026&amp;quot;&lt;br /&gt;
local function formatDateHuman(iso)&lt;br /&gt;
	if not isNonEmpty(iso) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local y, m, d = iso:match(&amp;#039;^(%d%d%d%d)%-(%d%d)%-(%d%d)$&amp;#039;)&lt;br /&gt;
	if not y then&lt;br /&gt;
		return esc(iso)&lt;br /&gt;
	end&lt;br /&gt;
	local month = MONTH_NAMES[tonumber(m)]&lt;br /&gt;
	if not month then&lt;br /&gt;
		return esc(iso)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(tonumber(d)) .. &amp;#039; &amp;#039; .. month .. &amp;#039; &amp;#039; .. y&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
-- Schema validation&lt;br /&gt;
--&lt;br /&gt;
-- Deliberately strict: an unrecognized status or verificationBasis raises&lt;br /&gt;
-- a Lua error (a visible broken page) rather than being silently accepted&lt;br /&gt;
-- or silently dropped. See the module header note above.&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local STATUS_INFO = {&lt;br /&gt;
	verified = { label = &amp;#039;Verified&amp;#039;, icon = &amp;#039;&amp;amp;#10003;&amp;#039;, tier = &amp;#039;positive&amp;#039;, rank = 1 },&lt;br /&gt;
	disputed = { label = &amp;#039;Disputed&amp;#039;, icon = &amp;#039;&amp;amp;#8252;&amp;#039;, tier = &amp;#039;dispute&amp;#039;, rank = 2 },&lt;br /&gt;
	unverified = { label = &amp;#039;Reported / Unverified&amp;#039;, icon = &amp;#039;?&amp;#039;, tier = &amp;#039;attention&amp;#039;, rank = 3 },&lt;br /&gt;
	unavailable = { label = &amp;#039;Confirmed Unavailable&amp;#039;, icon = &amp;#039;&amp;amp;#10005;&amp;#039;, tier = &amp;#039;negative&amp;#039;, rank = 4 },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local VERIFICATION_BASIS_LABELS = {&lt;br /&gt;
	carrier_vendor_admin = &amp;#039;Carrier Vendor/Admin&amp;#039;,&lt;br /&gt;
	direct_ingame = &amp;#039;Direct in-game test&amp;#039;,&lt;br /&gt;
	direct_ingame_negative = &amp;#039;Direct in-game test (negative)&amp;#039;,&lt;br /&gt;
	multiple_current_sources = &amp;#039;Multiple current sources&amp;#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function validateRecord(index, record)&lt;br /&gt;
	if type(record) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		error(&amp;#039;Module:FleetCarriers: record #&amp;#039; .. index .. &amp;#039; is not an object&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if not isNonEmpty(record.system) then&lt;br /&gt;
		error(&amp;#039;Module:FleetCarriers: record #&amp;#039; .. index .. &amp;#039; is missing a &amp;quot;system&amp;quot; value&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if not STATUS_INFO[record.status] then&lt;br /&gt;
		error(&amp;#039;Module:FleetCarriers: system &amp;quot;&amp;#039; .. tostring(record.system) ..&lt;br /&gt;
			&amp;#039;&amp;quot; has an unrecognized status &amp;quot;&amp;#039; .. tostring(record.status) ..&lt;br /&gt;
			&amp;#039;&amp;quot; -- allowed values are verified, unverified, disputed, unavailable&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if isNonEmpty(record.verificationBasis) and not VERIFICATION_BASIS_LABELS[record.verificationBasis] then&lt;br /&gt;
		error(&amp;#039;Module:FleetCarriers: system &amp;quot;&amp;#039; .. tostring(record.system) ..&lt;br /&gt;
			&amp;#039;&amp;quot; has an unrecognized verificationBasis &amp;quot;&amp;#039; .. tostring(record.verificationBasis) ..&lt;br /&gt;
			&amp;#039;&amp;quot; -- add it to VERIFICATION_BASIS_LABELS in Module:FleetCarriers if this is a genuinely new evidence type&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function loadRecords()&lt;br /&gt;
	local records = loadData(&amp;#039;Module:Data/FleetCarriers/Administration&amp;#039;)&lt;br /&gt;
	for index, record in ipairs(records) do&lt;br /&gt;
		validateRecord(index, record)&lt;br /&gt;
	end&lt;br /&gt;
	return records&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
-- Rendering helpers&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function statusBadge(record)&lt;br /&gt;
	local info = STATUS_INFO[record.status]&lt;br /&gt;
	local out = {}&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-badge edfm-fc-badge--&amp;#039; .. info.tier .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-badge-icon&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;gt;&amp;#039; .. info.icon .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-badge-text&amp;quot;&amp;gt;&amp;#039; .. info.label .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	if record.edfmVerified == true then&lt;br /&gt;
		table.insert(out, &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-chip&amp;quot; title=&amp;quot;An EDFM contributor moved a Fleet Carrier into this system and confirmed this directly in Fleet Carrier Management.&amp;quot;&amp;gt;EDFM Verified&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(out)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function verificationCell(record)&lt;br /&gt;
	if isNonEmpty(record.verificationBasis) then&lt;br /&gt;
		return esc(VERIFICATION_BASIS_LABELS[record.verificationBasis])&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;amp;mdash;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns { sort = &amp;lt;ISO date or &amp;#039;&amp;#039;&amp;gt;, text = &amp;lt;wikitext for the cell&amp;gt; }&lt;br /&gt;
local function lastCheckedCell(record)&lt;br /&gt;
	if isNonEmpty(record.ingameVerifiedDate) then&lt;br /&gt;
		return {&lt;br /&gt;
			sort = record.ingameVerifiedDate,&lt;br /&gt;
			text = esc(record.ingameVerifiedDate) .. &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-check-type&amp;quot;&amp;gt;In-game test&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
		}&lt;br /&gt;
	elseif isNonEmpty(record.sourceCheckedDate) then&lt;br /&gt;
		return {&lt;br /&gt;
			sort = record.sourceCheckedDate,&lt;br /&gt;
			text = esc(record.sourceCheckedDate) .. &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-check-type&amp;quot;&amp;gt;Source check&amp;lt;/span&amp;gt;&amp;#039;,&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	return { sort = &amp;#039;&amp;#039;, text = &amp;#039;&amp;amp;mdash;&amp;#039; }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function systemCell(record)&lt;br /&gt;
	local display = &amp;#039;&amp;lt;span class=&amp;quot;edfm-fc-system-name&amp;quot;&amp;gt;&amp;#039; .. esc(record.system) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	return &amp;#039;[[&amp;#039; .. record.system .. &amp;#039;|&amp;#039; .. display .. &amp;#039;]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function buildRow(record)&lt;br /&gt;
	local checked = lastCheckedCell(record)&lt;br /&gt;
	local out = {}&lt;br /&gt;
	table.insert(out, &amp;#039;|- class=&amp;quot;edfm-fc-row&amp;quot; data-fc-row=&amp;quot;1&amp;quot; data-status=&amp;quot;&amp;#039; .. escapeAttribute(record.status) ..&lt;br /&gt;
		&amp;#039;&amp;quot; data-edfm-verified=&amp;quot;&amp;#039; .. tostring(record.edfmVerified == true) ..&lt;br /&gt;
		&amp;#039;&amp;quot; data-region=&amp;quot;&amp;#039; .. escapeAttribute(record.region or &amp;#039;&amp;#039;) ..&lt;br /&gt;
		&amp;#039;&amp;quot; data-system=&amp;quot;&amp;#039; .. escapeAttribute(mw.ustring.lower(record.system)) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;| data-sort-value=&amp;quot;&amp;#039; .. escapeAttribute(record.system) .. &amp;#039;&amp;quot; | &amp;#039; .. systemCell(record))&lt;br /&gt;
	table.insert(out, &amp;#039;| data-sort-value=&amp;quot;&amp;#039; .. STATUS_INFO[record.status].rank .. &amp;#039;&amp;quot; | &amp;#039; .. statusBadge(record))&lt;br /&gt;
	table.insert(out, &amp;#039;| &amp;#039; .. (isNonEmpty(record.referenceStation) and esc(record.referenceStation) or &amp;#039;&amp;amp;mdash;&amp;#039;))&lt;br /&gt;
	table.insert(out, &amp;#039;| &amp;#039; .. verificationCell(record))&lt;br /&gt;
	table.insert(out, &amp;#039;| data-sort-value=&amp;quot;&amp;#039; .. escapeAttribute(checked.sort) .. &amp;#039;&amp;quot; | &amp;#039; .. checked.text)&lt;br /&gt;
	table.insert(out, &amp;#039;| &amp;#039; .. (isNonEmpty(record.notes) and esc(record.notes) or &amp;#039;&amp;#039;))&lt;br /&gt;
	return table.concat(out, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Renders one status group as a heading + sortable table, or nil if the&lt;br /&gt;
-- group currently has zero matching records (so the page never shows an&lt;br /&gt;
-- empty &amp;quot;Disputed&amp;quot; section until a record actually needs it).&lt;br /&gt;
local function buildGroup(records, status, heading, intro)&lt;br /&gt;
	local matching = {}&lt;br /&gt;
	for _, record in ipairs(records) do&lt;br /&gt;
		if record.status == status then&lt;br /&gt;
			table.insert(matching, record)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #matching == 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(matching, function(a, b) return a.system &amp;lt; b.system end)&lt;br /&gt;
&lt;br /&gt;
	local out = {}&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div class=&amp;quot;edfm-fc-group&amp;quot; data-fc-group=&amp;quot;&amp;#039; .. status .. &amp;#039;&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;h3 class=&amp;quot;edfm-fc-group-heading&amp;quot;&amp;gt;&amp;#039; .. heading .. &amp;#039; &amp;lt;span class=&amp;quot;edfm-fc-group-count&amp;quot;&amp;gt;(&amp;#039; .. #matching .. &amp;#039;)&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;&amp;#039;)&lt;br /&gt;
	if isNonEmpty(intro) then&lt;br /&gt;
		table.insert(out, intro)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &amp;#039;{| class=&amp;quot;wikitable sortable edfm-fc-table&amp;quot;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;! System !! Status !! Reference station !! Verification !! Last checked !! Notes&amp;#039;)&lt;br /&gt;
	for _, record in ipairs(matching) do&lt;br /&gt;
		table.insert(out, buildRow(record))&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &amp;#039;|}&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	return table.concat(out, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function discrepancyPanel(record)&lt;br /&gt;
	local out = {}&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div class=&amp;quot;edfm-fc-discrepancy&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;p class=&amp;quot;edfm-fc-discrepancy-lead&amp;quot;&amp;gt;Some external databases report Fleet Carrier Administration in &amp;lt;strong&amp;gt;&amp;#039; ..&lt;br /&gt;
		esc(record.system) .. &amp;#039;&amp;lt;/strong&amp;gt;. EDFM testing found the service &amp;#039; ..&lt;br /&gt;
		(record.status == &amp;#039;unavailable&amp;#039; and &amp;#039;unavailable&amp;#039; or &amp;#039;inconsistent with those reports&amp;#039;) ..&lt;br /&gt;
		&amp;#039; in-game&amp;#039; .. (isNonEmpty(record.ingameVerifiedDate) and (&amp;#039; on &amp;#039; .. formatDateHuman(record.ingameVerifiedDate)) or &amp;#039;&amp;#039;) .. &amp;#039;.&amp;lt;/p&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;dl&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div&amp;gt;&amp;lt;dt&amp;gt;System&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;#039; .. systemCell(record) .. &amp;#039;&amp;lt;/dd&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div&amp;gt;&amp;lt;dt&amp;gt;External reports&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;Administration available&amp;lt;/dd&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div&amp;gt;&amp;lt;dt&amp;gt;EDFM result&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;#039; .. STATUS_INFO[record.status].label .. &amp;#039;&amp;lt;/dd&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div&amp;gt;&amp;lt;dt&amp;gt;Checked&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;#039; ..&lt;br /&gt;
		(formatDateHuman(record.ingameVerifiedDate) or formatDateHuman(record.sourceCheckedDate) or &amp;#039;&amp;amp;mdash;&amp;#039;) .. &amp;#039;&amp;lt;/dd&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	if isNonEmpty(record.verifiedBy) then&lt;br /&gt;
		table.insert(out, &amp;#039;&amp;lt;div&amp;gt;&amp;lt;dt&amp;gt;Verified by&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;#039; .. esc(record.verifiedBy) .. &amp;#039;&amp;lt;/dd&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div&amp;gt;&amp;lt;dt&amp;gt;Status&amp;lt;/dt&amp;gt;&amp;lt;dd&amp;gt;&amp;#039; .. statusBadge(record) .. &amp;#039;&amp;lt;/dd&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;/dl&amp;gt;&amp;#039;)&lt;br /&gt;
	if isNonEmpty(record.notes) then&lt;br /&gt;
		table.insert(out, &amp;#039;&amp;lt;p class=&amp;quot;edfm-fc-discrepancy-notes&amp;quot;&amp;gt;&amp;#039; .. esc(record.notes) .. &amp;#039;&amp;lt;/p&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	return table.concat(out, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
-- Public entry points&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function p.verifiedTable()&lt;br /&gt;
	local records = loadRecords()&lt;br /&gt;
	return buildGroup(records, &amp;#039;verified&amp;#039;, &amp;#039;Verified&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.unverifiedTable()&lt;br /&gt;
	local records = loadRecords()&lt;br /&gt;
	local warning = &amp;#039;&amp;lt;div class=&amp;quot;edfm-guide-callout edfm-guide-callout--warning&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;edfm-guide-callout-label&amp;quot;&amp;gt;Not independently confirmed&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;edfm-guide-callout-body&amp;quot;&amp;gt;These systems have been reported as providing Fleet Carrier Administration but have not yet completed EDFM\&amp;#039;s current verification process. Check availability before committing a carrier jump solely for Administration.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	return buildGroup(records, &amp;#039;unverified&amp;#039;, &amp;#039;Reported / Unverified&amp;#039;, warning) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.disputedTable()&lt;br /&gt;
	local records = loadRecords()&lt;br /&gt;
	return buildGroup(records, &amp;#039;disputed&amp;#039;, &amp;#039;Disputed&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.unavailableTable()&lt;br /&gt;
	local records = loadRecords()&lt;br /&gt;
	return buildGroup(records, &amp;#039;unavailable&amp;#039;, &amp;#039;Confirmed Unavailable&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.discrepancies()&lt;br /&gt;
	local records = loadRecords()&lt;br /&gt;
	local matching = {}&lt;br /&gt;
	for _, record in ipairs(records) do&lt;br /&gt;
		if record.disputedExternalData == true or record.status == &amp;#039;disputed&amp;#039; then&lt;br /&gt;
			table.insert(matching, record)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if #matching == 0 then&lt;br /&gt;
		return &amp;#039;&amp;lt;p class=&amp;quot;edfm-fc-empty-state&amp;quot;&amp;gt;No documented data discrepancies yet.&amp;lt;/p&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(matching, function(a, b) return a.system &amp;lt; b.system end)&lt;br /&gt;
	local out = {}&lt;br /&gt;
	for _, record in ipairs(matching) do&lt;br /&gt;
		table.insert(out, discrepancyPanel(record))&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(out, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Full interactive directory: an empty JS-populated toolbar (see&lt;br /&gt;
-- MediaWiki:Common.js, initFleetCarrierDirectory -- degrades to a plain&lt;br /&gt;
-- unfiltered, natively-sortable set of tables with JS off) wrapping every&lt;br /&gt;
-- status group that currently has at least one record.&lt;br /&gt;
function p.directory(frame)&lt;br /&gt;
	local records = loadRecords()&lt;br /&gt;
	local out = {}&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div id=&amp;quot;edfm-fc-directory&amp;quot; class=&amp;quot;edfm-fc-directory&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;div id=&amp;quot;edfm-fc-toolbar&amp;quot; class=&amp;quot;edfm-fc-toolbar&amp;quot; role=&amp;quot;search&amp;quot; aria-label=&amp;quot;Filter Fleet Carrier Administration systems&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;p class=&amp;quot;edfm-fc-empty-state&amp;quot; id=&amp;quot;edfm-fc-no-results&amp;quot; hidden&amp;gt;No systems match the current filters.&amp;lt;/p&amp;gt;&amp;#039;)&lt;br /&gt;
	table.insert(out, buildGroup(records, &amp;#039;verified&amp;#039;, &amp;#039;Verified&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
	table.insert(out, buildGroup(records, &amp;#039;disputed&amp;#039;, &amp;#039;Disputed&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
	table.insert(out, buildGroup(records, &amp;#039;unverified&amp;#039;, &amp;#039;Reported / Unverified&amp;#039;,&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;edfm-guide-callout edfm-guide-callout--warning&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;edfm-guide-callout-label&amp;quot;&amp;gt;Not independently confirmed&amp;lt;/span&amp;gt;&amp;lt;div class=&amp;quot;edfm-guide-callout-body&amp;quot;&amp;gt;These systems have been reported as providing Fleet Carrier Administration but have not yet completed EDFM\&amp;#039;s current verification process. Check availability before committing a carrier jump solely for Administration.&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
	table.insert(out, buildGroup(records, &amp;#039;unavailable&amp;#039;, &amp;#039;Confirmed Unavailable&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
	table.insert(out, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;)&lt;br /&gt;
	return table.concat(out, &amp;#039;\n&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Sythan</name></author>
	</entry>
</feed>