Fill it in: roll a page's facts, and the people and places they point to, offline (generalises "a whole company") #1328

Open
opened 2026-11-03 16:00:55 +00:00 by claude-bot · 8 comments
Collaborator

Origin. The owner, 2026-11-03: first "a whole company, generated offline" (size, trade, name, what it makes, who owns and works there). Then, thinking further: it shouldn't be one category's feature. It should be optional ("after I pick a name I could choose to generate the rest of it"), and it should work from any starting point ("if I generate an NPC, maybe generate where they work or live").

The idea. Every page type already has a list of suggested facts per game system (#1279, suggested_facts.json). "Fill it in" rolls values for those facts, offline, from tables and from the name generators (#1257). A whole company is then just a Business page filled in. An NPC's Home and Work, a settlement's Ruler and Notable places, and a guild's Leader all use the same mechanism.

Two kinds of fact

  1. A value: Trade, Size, Status, Government, Climate, Rarity, a personality trait. These are rolled from a table for that fact and system, as data files reviewed like the suggested-fact lists. Some facts shape others: a company's Size sets how many staff it has and which trades fit; a settlement's size sets how many notable places it gets.
  2. Another page: Owner, Staff, Leader, Ruler, Home, Work, Allegiances, Notable places. Rolling one offers a new page (name from the fitting generator, type preset, and its own facts rolled one level deep) or an existing page from the campaign's wiki. A new page is linked from the fact ([[…]]).

Optional, step by step. Nothing is written until the GM says so.

  • Every empty fact gets a die button: roll this one, roll again, keep it. "Roll the rest" fills every empty fact at once.
  • Pages created along the way are a draft bundle: the GM sees them listed ("This will also make: Hask (Owner), Tilda and Bram (Staff)"), can drop any, and saves all at once. Discarding leaves no trace in the wiki.
  • One level deep by default: a rolled Owner gets their own facts, but not their own employer's whole staff. "Fill it in" on that new page goes further, if wanted.

Entry points

  • The name generator: after picking a name, "Make it a page" opens a new page of the right type with the name set and "Roll the rest" ready.
  • The wiki editor: the die on any empty fact (the infobox editor from #1279).
  • The table and Prep: a quick NPC mid-session ("a guard", "the innkeeper"). One press gives a name and a few rolled facts as a shelf card, made into a page only if it matters later.

The company bundle, as the first template. Size (small, medium or large) and Trade (selectable, or "surprise me") set:

  • a name fitted to both, from Companies;
  • what it makes, sells or does (one or two lines; prices or sample stock from the loaded rules where the system has them);
  • the owner, manager and staff (count by size), each a draft NPC with a role and one trait;
  • its Location: an existing settlement or street, or a rolled one.

Not in scope: AI. All of this is tables and generators. Facts suggested from transcripts are #1280, a different source.

Depends on: #1279 (merged), #1257 (the generators, being rated), and the owner's answers to the questions on the Questions page.

Release: new functionality, so an X.Y.0 after 4.7.0.

**Origin.** The owner, 2026-11-03: first "a whole company, generated offline" (size, trade, name, what it makes, who owns and works there). Then, thinking further: it shouldn't be one category's feature. It should be optional ("after I pick a name I could choose to generate the rest of it"), and it should work from any starting point ("if I generate an NPC, maybe generate where they work or live"). **The idea.** Every page type already has a list of suggested facts per game system (#1279, `suggested_facts.json`). "Fill it in" rolls values for those facts, offline, from tables and from the name generators (#1257). A whole company is then just a Business page filled in. An NPC's Home and Work, a settlement's Ruler and Notable places, and a guild's Leader all use the same mechanism. **Two kinds of fact** 1. **A value:** Trade, Size, Status, Government, Climate, Rarity, a personality trait. These are rolled from a table for that fact and system, as data files reviewed like the suggested-fact lists. Some facts shape others: a company's Size sets how many staff it has and which trades fit; a settlement's size sets how many notable places it gets. 2. **Another page:** Owner, Staff, Leader, Ruler, Home, Work, Allegiances, Notable places. Rolling one offers a **new page** (name from the fitting generator, type preset, and its own facts rolled one level deep) or **an existing page** from the campaign's wiki. A new page is linked from the fact (`[[…]]`). **Optional, step by step. Nothing is written until the GM says so.** - Every empty fact gets a die button: roll this one, roll again, keep it. "Roll the rest" fills every empty fact at once. - Pages created along the way are a **draft bundle**: the GM sees them listed ("This will also make: Hask (Owner), Tilda and Bram (Staff)"), can drop any, and saves all at once. Discarding leaves no trace in the wiki. - **One level deep by default:** a rolled Owner gets their own facts, but not their own employer's whole staff. "Fill it in" on that new page goes further, if wanted. **Entry points** - **The name generator:** after picking a name, "Make it a page" opens a new page of the right type with the name set and "Roll the rest" ready. - **The wiki editor:** the die on any empty fact (the infobox editor from #1279). - **The table and Prep:** a quick NPC mid-session ("a guard", "the innkeeper"). One press gives a name and a few rolled facts as a shelf card, made into a page only if it matters later. **The company bundle, as the first template.** Size (small, medium or large) and Trade (selectable, or "surprise me") set: - a name fitted to both, from Companies; - what it makes, sells or does (one or two lines; prices or sample stock from the loaded rules where the system has them); - the owner, manager and staff (count by size), each a draft NPC with a role and one trait; - its Location: an existing settlement or street, or a rolled one. **Not in scope:** AI. All of this is tables and generators. Facts suggested from transcripts are #1280, a different source. **Depends on:** #1279 (merged), #1257 (the generators, being rated), and the owner's answers to the questions on the Questions page. **Release:** new functionality, so an X.Y.0 after 4.7.0.
claude-bot changed title from A whole company, generated offline: size, trade, name, and the people who own and work there to Fill it in: roll a page's facts, and the people and places they point to, offline (generalises "a whole company") 2026-11-03 16:09:35 +00:00
Author
Collaborator

The owner's answers (2026-11-03). They become decision rows (D327–D329) when the drawing lands.

  • Q220: one "Fill it in" mechanism for every page type, with the company as the first and richest template.
  • Q221: one level deep. Everything a roll makes is listed before saving, any of it can be dropped, and discarding leaves nothing in the wiki.
  • Q222: all three ways in, in this order: the wiki editor (a die on each empty fact, plus "Roll the rest"), then the name generator ("Make it a page"), then the table and Prep (a quick NPC as a shelf card).

Next: a drawing (lane 6k) of the editor's dice and "Roll the rest", the draft-bundle list before saving, the company template (size and trade), and "Make it a page" from the name generator. The tables of values for each fact come with it, for review. This is new functionality, so it goes in the release after 4.7.0.

**The owner's answers (2026-11-03).** They become decision rows (D327–D329) when the drawing lands. - **Q220:** one "Fill it in" mechanism for every page type, with the company as the first and richest template. - **Q221:** one level deep. Everything a roll makes is listed before saving, any of it can be dropped, and discarding leaves nothing in the wiki. - **Q222:** all three ways in, in this order: the wiki editor (a die on each empty fact, plus "Roll the rest"), then the name generator ("Make it a page"), then the table and Prep (a quick NPC as a shelf card). **Next:** a drawing (lane 6k) of the editor's dice and "Roll the rest", the draft-bundle list before saving, the company template (size and trade), and "Make it a page" from the name generator. The tables of values for each fact come with it, for review. This is new functionality, so it goes in the release after 4.7.0.
Author
Collaborator

Phone layout (owner, 2026-11-03): the die sits beside the value, not under it. A fact row on a phone is three compact rows: the fact's name; the value with its die or Roll again; Who sees it with Remove. Lane 6k is updated and live (0 overlaps, no sideways scroll at 390 px).

Matching jobs to the company (the owner's question): each trade is a reviewed recipe, in data, not code. A company_trades.json file, reviewed like the suggested-fact lists, gives each trade:

  • Sizes it comes in. An eatery can be small or medium; a mercenary company only medium or large; a moneylender any.

  • Roles by size, as slots: a title, how many, required or optional, and who they tend to be. For example:

    • Smithy, small: Smith (owner), required; Apprentice, required, 40% a relative of the owner.
    • Smithy, medium: adds Journeyman ×1–2 and Bookkeeper (optional).
    • Carter & shipper, large: Senior partner, Junior partner, Yard master, Factor at the coast, Barge captain ×1–2, Head carter, Clerk, Warehouse keeper, Insurer's man (optional).

    Required slots are filled first, then optional ones up to the size's headcount, so a large shipper never comes out as a smith and an apprentice.

  • Traits per role, drawn without repeats and mixed with a general pool. A clerk gets "keeps a second ledger nobody has seen", a barge captain "superstitious about red sails". Traits fit the job, and no two people in one company share one.

  • What-it-does lines with slots: "{goods} down the {river} to the coast, and {return goods} back up". The goods and route words come from the trade, and the place words from the company's location.

  • Name patterns fitted to the trade (Forge, Smithy and Ironworks for a smithy; Carrying Company and Freight for a shipper). A name built on the owner's name uses the rolled owner's name, so "Hask's Forge" is always run by a Hask. Relatives share the surname.

  • Where it can be. A shipper needs a settlement on a river or coast, a quarry the hills, a mill water. A rolled location is drawn to suit, and an existing one is offered only if it fits.

  • Names of the people come from the campaign's usual styles, or a mix chosen once in the campaign's settings.

All of this is offline and deterministic enough to test: each trade and size is rolled thousands of times in tests, checking that required roles are present, the headcount is right, no trait repeats, the owner and the name agree, and the location suits. The recipes would go on the feedback site to rate, like the names, before they reach Quest Board.

**Phone layout (owner, 2026-11-03):** the die sits beside the value, not under it. A fact row on a phone is three compact rows: the fact's name; the value with its die or Roll again; Who sees it with Remove. Lane 6k is updated and live (0 overlaps, no sideways scroll at 390 px). **Matching jobs to the company (the owner's question): each trade is a reviewed recipe, in data, not code.** A `company_trades.json` file, reviewed like the suggested-fact lists, gives each trade: - **Sizes it comes in.** An eatery can be small or medium; a mercenary company only medium or large; a moneylender any. - **Roles by size, as slots:** a title, how many, required or optional, and who they tend to be. For example: - Smithy, small: *Smith (owner)*, required; *Apprentice*, required, 40% a relative of the owner. - Smithy, medium: adds *Journeyman ×1–2* and *Bookkeeper* (optional). - Carter & shipper, large: *Senior partner*, *Junior partner*, *Yard master*, *Factor at the coast*, *Barge captain ×1–2*, *Head carter*, *Clerk*, *Warehouse keeper*, *Insurer's man* (optional). Required slots are filled first, then optional ones up to the size's headcount, so a large shipper never comes out as a smith and an apprentice. - **Traits per role,** drawn without repeats and mixed with a general pool. A clerk gets "keeps a second ledger nobody has seen", a barge captain "superstitious about red sails". Traits fit the job, and no two people in one company share one. - **What-it-does lines** with slots: "{goods} down the {river} to the coast, and {return goods} back up". The goods and route words come from the trade, and the place words from the company's location. - **Name patterns fitted to the trade** (Forge, Smithy and Ironworks for a smithy; Carrying Company and Freight for a shipper). A name built on the owner's name uses the **rolled owner's** name, so "Hask's Forge" is always run by a Hask. Relatives share the surname. - **Where it can be.** A shipper needs a settlement on a river or coast, a quarry the hills, a mill water. A rolled location is drawn to suit, and an existing one is offered only if it fits. - **Names of the people** come from the campaign's usual styles, or a mix chosen once in the campaign's settings. All of this is offline and deterministic enough to test: each trade and size is rolled thousands of times in tests, checking that required roles are present, the headcount is right, no trait repeats, the owner and the name agree, and the location suits. The recipes would go on the feedback site to rate, like the names, before they reach Quest Board.
Author
Collaborator

The owner's answers (2026-11-03), Q223–Q226:

  • Q223, trades: the owner's own list of 15: Food/Drink, Smith, Barber/Healing, Mill, Textiles, Tannery, Brewery, Carter/Shipper, Moneylender, Quarry & Materials, Mercenaries, Stables, Provisions/Grocery, Bookshop, Theater/Entertainment. "Surprise me" stays.
  • Q224, staff by size: as drawn: 2 for small, 4–5 with a manager for medium, 8–10 key people for large.
  • Q225, stat blocks for rolled people: not yet. Names, roles and facts come first.
  • Q226, other things to roll: an NPC's secret, want or fear, plus rumours, in the first build. Menus, cargo and shop stock come later.

Jobs first, not trades first (the owner's suggestion, adopted): list every job once, with the trades it can work in, e.g. job: smith; trades: smith, shipping, stables. A trade then only says:

  • its sizes and headcount;
  • the job that runs it at each size (Smith runs a smithy; Senior partner runs a large shipper);
  • any jobs it must have at a size (a shipper's Yard master from medium up).

The remaining places are filled from every job that lists the trade, so adding a job adds it everywhere it fits without touching any trade. A job can carry a title per trade (a smith on a ship is the ship's smith or armourer; in a stables, the farrier), a lowest size (a Factor only in a large house), its traits, and how often it's a relative of the owner.

The same list answers the reverse question, the owner's earlier idea: an NPC who rolls "smith" for their job can roll where they work, from the trades that job lists, as a new company or one the campaign has.

Lane 6k's die is now level with the value box on phones and wide screens (measured to within a pixel).

**The owner's answers (2026-11-03), Q223–Q226:** - **Q223, trades:** the owner's own list of 15: Food/Drink, Smith, Barber/Healing, Mill, Textiles, Tannery, Brewery, Carter/Shipper, Moneylender, Quarry & Materials, Mercenaries, Stables, Provisions/Grocery, Bookshop, Theater/Entertainment. "Surprise me" stays. - **Q224, staff by size:** as drawn: 2 for small, 4–5 with a manager for medium, 8–10 key people for large. - **Q225, stat blocks for rolled people:** not yet. Names, roles and facts come first. - **Q226, other things to roll:** an NPC's secret, want or fear, plus rumours, in the first build. Menus, cargo and shop stock come later. **Jobs first, not trades first** (the owner's suggestion, adopted): list every job once, with the trades it can work in, e.g. `job: smith; trades: smith, shipping, stables`. A trade then only says: - its **sizes** and **headcount**; - the **job that runs it** at each size (Smith runs a smithy; Senior partner runs a large shipper); - any **jobs it must have** at a size (a shipper's Yard master from medium up). The remaining places are filled from **every job that lists the trade**, so adding a job adds it everywhere it fits without touching any trade. A job can carry a **title per trade** (a smith on a ship is the ship's smith or armourer; in a stables, the farrier), a **lowest size** (a Factor only in a large house), its **traits**, and how often it's a relative of the owner. The same list answers the reverse question, the owner's earlier idea: an NPC who rolls "smith" for their job can roll **where they work**, from the trades that job lists, as a new company or one the campaign has. Lane 6k's die is now level with the value box on phones and wide screens (measured to within a pixel).
Author
Collaborator

The owner's answer to Q227 (2026-11-03): (a). The trades list for the company template is these 22, plus Magic & enchantments where the system sells magic (Pathfinder 2e yes; it can be switched off for a low-magic setting):

  • Food and lodging: Tavern & eatery · Inn & lodging · Brewery & distillery · Provisions (baker, butcher, grocer, general store)
  • Crafts: Smithy · Carpenter & builder · Textiles & tailoring · Tannery & leatherwork · Jeweller & goldsmith
  • Raw goods: Mill · Quarry, mine & materials · Farm & estate · Fishing & fishmonger
  • Services: Barber-surgeon & healer · Apothecary & alchemist · Stables & farrier · Carter & shipper · Bank & moneylender · Books, maps & scribes · Theatre & entertainers · Mercenary company · Pawnbroker & curios

"Surprise me" stays. Each trade gives its sizes, headcount, the job that runs it and any required jobs. Every other place comes from the jobs list (jobs first, see above).

**The owner's answer to Q227 (2026-11-03): (a).** The trades list for the company template is these 22, plus Magic & enchantments where the system sells magic (Pathfinder 2e yes; it can be switched off for a low-magic setting): - **Food and lodging:** Tavern & eatery · Inn & lodging · Brewery & distillery · Provisions (baker, butcher, grocer, general store) - **Crafts:** Smithy · Carpenter & builder · Textiles & tailoring · Tannery & leatherwork · Jeweller & goldsmith - **Raw goods:** Mill · Quarry, mine & materials · Farm & estate · Fishing & fishmonger - **Services:** Barber-surgeon & healer · Apothecary & alchemist · Stables & farrier · Carter & shipper · Bank & moneylender · Books, maps & scribes · Theatre & entertainers · Mercenary company · Pawnbroker & curios "Surprise me" stays. Each trade gives its sizes, headcount, the job that runs it and any required jobs. Every other place comes from the jobs list (jobs first, see above).
Author
Collaborator

Names that use the place they're in (the owner's follow-up, 2026-11-03, long-term). Many company, guild, church and noble names include their town, region or area: "The Kettlebridge Chandlers' Guild", "St Odile's of Harrowmere", "House Varro of Kettlebridge", "The Saltmarsh Trading Company". When a roll knows where it is, the name should use that real place, not a generated one.

How it fits here:

  • Place context: every name pattern that has a place slot (the guild's town, a house's seat, a trading company's region, a temple's parish) takes an optional place. "Fill it in" passes one whenever it knows it:
    • the company's Location fact, once rolled or picked;
    • the settlement or region a page is filed under;
    • the place the GM is rolling things up for ("roll up Kettlebridge": its ruler, guilds, temples, inns and businesses all named from Kettlebridge and its region).
  • The right level of place: a guild or a temple uses the town; a trading company or a noble house may use the region or country ("The Saltmarsh Trading Company", "House Varro of the Esk Vale"); a street uses the town only rarely.
  • Without a place, patterns fall back to a generated place name, as the names page does today.
  • Prep → Names (#1257) can offer the same thing later: a "for: Kettlebridge" choice beside the style.

The engine in #1257 should be built so a pattern's place slot can be filled from outside, so this needs no rewrite later.

**Names that use the place they're in** (the owner's follow-up, 2026-11-03, long-term). Many company, guild, church and noble names include their town, region or area: "The Kettlebridge Chandlers' Guild", "St Odile's of Harrowmere", "House Varro of Kettlebridge", "The Saltmarsh Trading Company". When a roll knows where it is, the name should use that real place, not a generated one. **How it fits here:** - **Place context:** every name pattern that has a place slot (the guild's town, a house's seat, a trading company's region, a temple's parish) takes an optional place. "Fill it in" passes one whenever it knows it: - the company's Location fact, once rolled or picked; - the settlement or region a page is filed under; - the place the GM is rolling things up for ("roll up Kettlebridge": its ruler, guilds, temples, inns and businesses all named from Kettlebridge and its region). - **The right level of place:** a guild or a temple uses the town; a trading company or a noble house may use the region or country ("The Saltmarsh Trading Company", "House Varro of the Esk Vale"); a street uses the town only rarely. - **Without a place,** patterns fall back to a generated place name, as the names page does today. - **Prep → Names (#1257)** can offer the same thing later: a "for: Kettlebridge" choice beside the style. The engine in #1257 should be built so a pattern's place slot can be filled from outside, so this needs no rewrite later.
Author
Collaborator

Slice 1 is up for review: PR #1354 (the recipes as data, plus a rating page at /companies on the feedback site). Not merged, not deployed.

Slice 1 is up for review: PR #1354 (the recipes as data, plus a rating page at `/companies` on the feedback site). Not merged, not deployed.
Author
Collaborator

Slice 1 is merged (#1354) and live on the feedback site (owner's approval, 2026-11-06).

  • The rating page: https://questboard-dev.rhoving.com/feedback/companies?k=<share key>, the same key as the names page. Ratings are stored per rater like the names ones, and they're in the review dashboard under "Company roller", with a CSV.
  • Deployed from the PR's tools/feedback-site onto docker-test's ~/projects/qb-feedback. .env and the ratings volume were kept. The old copy is backed up at ~/projects/qb-feedback.bak-20261106T210220Z.
  • Checked: /health is ok. /companies, fill-data.js, fill-engine.js and name-engine.js load through the public /feedback/ prefix, the page's links are relative, and /names still loads its moved engine.

Next: slice 2 builds the engine into Quest Board (port the data word for word, as the names were), after the owner's ratings. Two notes are already queued for that round: in-laws shouldn't share the owner's surname, and the two "what it does" lines shouldn't repeat each other.

**Slice 1 is merged (#1354) and live on the feedback site (owner's approval, 2026-11-06).** - **The rating page:** `https://questboard-dev.rhoving.com/feedback/companies?k=<share key>`, the same key as the names page. Ratings are stored per rater like the names ones, and they're in the review dashboard under "Company roller", with a CSV. - **Deployed** from the PR's `tools/feedback-site` onto docker-test's `~/projects/qb-feedback`. `.env` and the ratings volume were kept. The old copy is backed up at `~/projects/qb-feedback.bak-20261106T210220Z`. - **Checked:** `/health` is ok. `/companies`, `fill-data.js`, `fill-engine.js` and `name-engine.js` load through the public `/feedback/` prefix, the page's links are relative, and `/names` still loads its moved engine. **Next:** slice 2 builds the engine into Quest Board (port the data word for word, as the names were), after the owner's ratings. Two notes are already queued for that round: in-laws shouldn't share the owner's surname, and the two "what it does" lines shouldn't repeat each other.
rbrooks referenced this issue from a commit 2026-11-07 15:45:30 +00:00
Author
Collaborator

The owner's company ratings are in (2026-11-09): all 8 trades rated got a thumbs up (inn, brewery, provisions, smithy, carpenter, textiles, bank, magic). The one note: "Chalthorpe & Daughters" had kin whose names didn't match. Q254 (CG1) was answered (c), recorded as D346. Slice 2 uses neutral patterns ("& Kin", "& Family", "& Children") in place of "& Sons", "& Daughters" and "& Daughter", and gendered names follow as their own issue.

Slice 2 starts now: the engine ported into Quest Board with its data word for word, plus the queued fixes:

  • the neutral patterns;
  • in-laws don't share the owner's surname;
  • a company's two "what it does" lines never repeat each other.

Then the wiki editor's dice and "Roll the rest", the draft-bundle list, and the company template (the first way in, Q222). A contract comes first.

**The owner's company ratings are in (2026-11-09):** all 8 trades rated got a thumbs up (inn, brewery, provisions, smithy, carpenter, textiles, bank, magic). The one note: "Chalthorpe & Daughters" had kin whose names didn't match. Q254 (CG1) was answered (c), recorded as D346. Slice 2 uses neutral patterns ("& Kin", "& Family", "& Children") in place of "& Sons", "& Daughters" and "& Daughter", and gendered names follow as their own issue. **Slice 2 starts now:** the engine ported into Quest Board with its data word for word, plus the queued fixes: - the neutral patterns; - in-laws don't share the owner's surname; - a company's two "what it does" lines never repeat each other. Then the wiki editor's dice and "Roll the rest", the draft-bundle list, and the company template (the first way in, Q222). A contract comes first.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#1328
No description provided.