| name | overhaul-company-page |
| description | Use when bringing a Star Citizen Wiki company or manufacturer article up to the canonical standard - converting {{Infobox company}} to {{Company}}, enriching from Galactapedia and the RSI Portfolio, restructuring sections, adding a products table, copyediting to wiki style, and setting the short description. Triggered by "do the company pass on <X>", "overhaul the <company> page", "continue the company pages sweep". |
Overhaul a Company Page
Per-page pass that brings a company/manufacturer article to the canonical standard: {{Company}} infobox, Galactapedia + Portfolio-sourced content, a flat section structure, a {{Manufacturer products}} table for manufacturers, neutral wiki-style prose, and a curated short description. Run it on each page across the ~280 legacy {{Infobox company}} transclusions. The pilot reference page is [[Behring Applied Technology]]; the field survey and the area-served noise-cut rule live in the project_company_areaserved memory.
The steps are ordered and later steps assume earlier ones. Skip a step already satisfied (a page already on {{Company}} skips step 1).
REQUIRED BACKGROUND: the expand-stub-with-source skill covers the source-fetch fallback ladder and the {{Cite RSI}} / named-ref conventions used in steps 2-3 and 6. Deploy any code/template change with deploy-to-wiki, never from this skill.
When to use vs not
Use when:
- A company/manufacturer page is on legacy
{{Infobox company}}, or is on {{Company}} but not yet enriched/structured/copyedited.
- The user names a company or asks to continue the company pass.
Don't use when:
- The subject is a faction/organization with no manufacturer identity or product line -
{{Company}} may not be the right template.
- The page is already at standard, or you only need one mechanical edit.
Prerequisites
Module:Company, Template:Company, and Template:Manufacturer products exist on the wiki and in this repo.
- Public reads work via
curl (api.star-citizen.wiki, plus the MediaWiki action=parse / action=ask / action=query); writes go through the MediaWiki MCP with wiki: "starcitizen.tools" on every call.
Steps
1. Convert {{Infobox company}} -> {{Company}}
Map the legacy params onto {{Company}}. Key differences:
- Multi-value fields use a semicolon (
;), not a comma (avoids colliding with commas inside names/links): industry, products, founder, subsidiaries, predecessor, successor, allies, rivals, keypeople. predecessor/successor are multi-value because a merger has several predecessors (and a split, several successors); each renders as a list and stores an SMW Page list.
- Drop the legacy comment placeholders.
{{Infobox company}} carries |param = <!-- ... --> hints; do not copy them into {{Company}} - they add nothing and interfere with VisualEditor. Keep only populated parameters and drop empty ones entirely (no bare |param = lines).
- Manufacturer code is derived from the company name via
Module:Manufacturers - there is no code param; drop any legacy one.
founded is a clean year (e.g. 2554). The module renders the date via {{Start date and age}}; do not pass a template.
headquarters: separate multiple HQs with ;; each as place, ..., system. The module stores one star system per HQ (the last wikilink of each segment) to SMW. Keep the display tidy - drop redundant pipes ([[Terra system|Terra]] -> [[Terra system]]) and do not over-disambiguate - but keep each distinct real place: a city/planet/system chain like [[Jata]], [[Cestulus]], [[Davien system]] is fine, not just two links.
areaserved: apply the noise-cut - leave it blank when it is simply the whole UEE ([[United Empire of Earth]] / UEE space / Human occupied space); fill it only when narrower (a city, planet, system, or "limited export"). It is an SMW Page list (semicolon-separated, every served place).
2. Enrich from Galactapedia
Galactapedia is the most up-to-date canon; prefer it whenever it conflicts with older content.
- Find the article. If the infobox already has
galactapediaurl, the ID is the 12-char token in it (e.g. 0n9vZ4GpQn from .../0n9vZ4GpQn-behring). Otherwise search GET /api/galactapedia?query=<name> and take the result whose type/template is Company.
- Fetch
GET /api/galactapedia/<ID>?include=properties (ID only, <=12 chars - the full <id>-slug is rejected; /api/v2 redirects to /api). Two things you need:
translations.en_EN - the prose (markdown with [text](url) RSI galactapedia links) for the lead. Always present.
properties - an array of {name, value} pairs holding RSI's infobox data (industry, products, founded, headquarters). Returned only when you pass ?include=properties - the default fetch omits it. The default fetch does give tags, category, categories, and thumbnail.
- Industry trap: do not copy the
properties industry values verbatim - they are inconsistent (some omit "manufacture", some are stale, e.g. weapon attachments), and the GP page's displayed infobox factors the shared "manufacture" out entirely. Cross-reference the tags (weapon component manufacturer, munitions manufacturer, ...) to produce the clean, fully-qualified list: Weapons manufacture; Weapon components manufacture; Munitions manufacture; Spacecraft components manufacture.
- Casing: sentence-case each
industry/products list item for display (e.g. Personal weapons; Spacecraft weapons). The module's SMW transform lower-cases them for storage automatically.
- Map and reconcile.
properties founded is the bare year (2554). properties headquarters gives planet designations () - render each as a concise (; ). Reconcile every field and the lead against GP, but keep the page's value when it is than GP (the page may already supersede an old portfolio). Complete the Galactapedia citation: .
3. Enrich from the RSI Portfolio
- Find the Portfolio comm-link: list
GET /api/comm-links?filter[series]=Portfolio and paginate with page[number]=N (the plain series=/query=/page= params are ignored; only the filter[...] / page[number] JSON:API forms work). URL-encode the brackets (--data-urlencode 'filter[series]=Portfolio', or filter%5Bseries%5D=...&page%5Bnumber%5D=N) - unquoted brackets in a shell silently return an empty or mixed result. Match by company name (titles are Portfolio: <Name>).
- Fetch
GET /api/comm-links/<id> for the content + rsi_url. Enrich the page's prose with it; prefer Galactapedia on any conflict. Cite with {{Cite RSI}}.
portfoliourl: set it to the comm-link's rsi_url only if the URL genuinely still serves the portfolio. RSI soft-404s removed comm-links, so the status code alone lies: a HEAD (curl -I) returns 200 even for a removed portfolio. Use a GET (curl -sL -A 'Mozilla/5.0', never -I) and require BOTH a non-404 status AND a body that actually contains the article (grep for the company name or a distinctive sentence, not the generic RSI boilerplate). Fail either check -> leave portfoliourl blank and cite the content via its Wayback archive. (Behring is the worked example: HEAD=200 but GET=404 and the body is the generic shell, so portfoliourl stays blank.)
- If the page already contains the portfolio content (common - many pages were originally built from it), this step is a citation/verify pass, not new prose.
4. Structure: keep sections flat
Use top-level sections; do not add a == Lore == wrapper (the flagship pages - Anvil, RSI, Aegis, Crusader, Drake, Origin - all use flat ==History==). Canonical order:
History -> [page-specific: Departments / Manufacturing / Jurisdiction / ...] -> Products -> Gallery -> Trivia -> See also -> References
In-fiction narrative and real-world notes are sibling top-level sections (e.g. ==Development==), never nested under an umbrella.
5. Products table (manufacturers only)
If the company manufactures items, add a Products section in the content band (after the in-fiction prose, before the appendix sections):
==Products==
{{Manufacturer products}}
- The category defaults to the page title. Verify the category actually has members (
get-category-members on Category:<page title>): every migrated item carries a manufacturer category equal to the manufacturer name. When the page title differs from it (disambiguated, abbreviated, or differently-cased - ArcCorp (company) -> ArcCorp, Microtech, MISC), pass the override {{Manufacturer products | <category>}}. A 0-member category usually means the wrong name - try the variants first.
- If the category is genuinely empty after checking the title and its plausible variants (the company simply has no products catalogued on the wiki yet - e.g. A-Tek, Accelerated Mass Design, Armitage), omit the
==Products== section entirely rather than emit an empty grid. An empty {{Manufacturer products}} renders a dead/broken-looking table. Re-add the section when product pages exist.
- Confirm the members are products, not just that the count is nonzero - a few company categories also hold non-product pages (e.g.
Category:ArcCorp mixes in mining areas), and the table lists every main-namespace member.
- Drop
{{Navplate manufacturers|<CODE>}} - the live, filterable table supersedes the static navbox.
- Ship manufacturers are a known rough edge. A ship-maker's category (e.g.
Aegis Dynamics) mixes its ships (which have no Item type) with its components (Coolers, Flight Blades, ...); {{Manufacturer products}} lists both, with a blank Item type for the ships. Use it anyway for now - a ship-appropriate products presentation is a separate future effort. Behring, a pure component-maker, was the clean case.
6. Copyedit to wiki style
Full pass on the prose to neutral, encyclopedic, third-person wiki style. Preserve every fact, <ref> (including a reused <ref name="x"/> appearing the right number of times), [[wikilink]], template, and HTML comment - change only the voice/grammar.
- Remove marketing/hype/editorialising ("the biggest gun in the galaxy", "famously", "lightning-quick", "More horrific rumors").
- No second person, no rhetorical questions.
- No em or en dashes as punctuation (project rule); use commas, parentheses, or separate sentences.
- Remove informal usage: "etc.", "a lot of", "one-stop shop",
... ellipses, sentence fragments. Fix grammar (dangling subjects, comma splices, double spaces).
- Attribute rumours neutrally ("It is widely believed", "Some reports suggest"). American English.
- A
draft -> adversarial-verify workflow works well here: one agent rewrites, a second checks fact/ref/wikilink preservation and residual style issues against the original before posting. Always show the draft before posting.
7. Short description (must be the LAST thing on the page)
Module:Company sets an automatic SHORTDESC (" company in the industry"). It runs when {{Company}} is parsed, near the top. SHORTDESC is last-wins, and noreplace is NOT honored on this wiki - so a {{Short description}} placed above {{Company}} is silently overridden and dead.
- Place
{{Short description|...}} at the end of the page (after {{Company}}, e.g. after the categories) so it wins. If a legacy one sits at the top, move it to the end.
- Curate it to say what the company is at a glance AND to differentiate it from its peers. Lead with the company's most distinguishing trait, not a mechanical formula. Home location (
<Race> <type> based on <primary HQ>) is only one differentiator, and a weak one when the HQ is a default (most Human companies are on Earth/Terra, so "based on Earth" distinguishes nothing). Prefer a sharper trait when one exists: the product specialty (Human energy weapons manufacturer), market position, or characteristic structure. Example: Aopoa is best as Xi'an light spacecraft manufacturing monopoly, because every Xi'an company holds a single-industry monopoly, so naming the sector + the monopoly says far more than the location. Keep it concise (~40 chars).
- Verify with
action=query&prop=pageprops that the stored shortdesc is your curated value, not the module's auto one.
Gotchas
- MCP write auth resolves wiki credentials via the
op (1Password) CLI; reads do not need it, so use curl for all the read/verify steps. If writes fail with an op error, the user fixes the credential helper - pause and ask.
- AG Grid data store: a
{{Manufacturer products}} / {{Data table}} grid serves its rows from a per-revision store written by LinksUpdate, not inline. After editing a consumer page the grid can be briefly empty until LinksUpdate runs; HTML inspection cannot confirm rows loaded (the grid is client-side), and a headless/anonymous browser session may not render AG Grid at all. The wiring is correct if <div class="ext-aggrid" data-mw-aggrid-pageid=...> is emitted with the right columnDefs.
- Galactapedia
properties needs ?include=properties - the default fetch omits it entirely (no industry/products/founded/headquarters). And the industry values it returns are messy; expand them via tags (step 2).
- Galactapedia
thumbnail is usually a generic placeholder. GP serves a single shared placeholder image (byte-identical, md5 278879e3c41a001689260f0933a7f4ba, exactly 5003 bytes) for company articles that have no real logo. A non-null thumbnail does NOT mean a real image exists. Before flagging a page as missing an image, download the thumbnail and check it against that md5/size; only a genuinely distinct image is a real, uploadable logo (in a 158-page sweep, 14 of 16 flagged thumbnails were this placeholder).
- Portfolio
rsi_url soft-404s - RSI serves a 200 SPA shell for removed comm-links (a HEAD/curl -I especially); verify liveness with a GET plus a body check, never the status code alone (step 3).
{{Short description}} must be last - the single most common mistake, because the wiki convention elsewhere is top-of-page.
- Don't fabricate facts for sparse pages; leave them sparse.
- Outdated lore: content from an old portfolio that predates current canon keeps its
{{Outdated}}/{{Note}} flags - the copyedit fixes voice, not staleness.
What this skill does not do
- It doesn't deploy module/template code (use
deploy-to-wiki) or generate the {{Manufacturer products}} doc (use doc-page-from-readme).
- It doesn't migrate factions/organizations that aren't companies.
- It doesn't invent factual content for sparse pages.