DEV BUILD - NOT FOR PUBLIC USE
 

Check out our latest Campaign!

 

Engineering Office Report #10 – v3.7 Release

October 11, 2025

With the New Frontiers campaign just around the corner, and following the news from the Logistics Office regarding affiliate commands, we’re pleased to announce the release of BFMS v3.7. Some of the highlights in this release include:

  • Affiliate Commands: The headline feature of this release is the implementation of affiliate slots, which at launch allow eligible members to purchase one Klingon and one Romulan command in addition to their regular commands. You can only assign commands aligned with that faction to their respective affiliate slot, and they do not count against your regular slot count. In order to support this, updates were made to the fleet marketplace, command units, character ranks, and other supporting systems.
  • Writing: While affiliate commands might be the most impactful addition from a story building perspective, in light of the upcoming campaign, we thought now would be a good time to make some other improvements to the writing experience too (or in many cases, really the reading experience). These include previous and next story buttons to make it easier to sit down and read the story of a command, author and post date details in the story view for improved clarity, and a new author’s notes section where writers can add editorial comments, content warnings, etc.
  • Gaming: As the gaming experience in the fleet continues to grow and evolve, we have added Gaming Events as a first class citizen within BFMS so they’re no longer just a function of Discord.
  • Bolty: Our friendly neighborhood bot has been busy keeping us up to date with the stories of the fleet for months, but now his responsibilities are expanding. Beyond stories, Bolty will now share updates on awards, promotions and new joiners, as well as helping swap around roles during task force transfers.

In addition to these major items, a number of bug fixes, system improvements and quality-of-life changes were made, and the full list of changes can be found in the patch notes accompanying this report.

Staff Update

Along with the release of BFMS v3.7, we’re also pleased to announce that Commodore Sazra Kobahl (RaWolfe) is officially joining the Engineering Office as Staff Assistant, Quality Assurance. For the past two years, RaWolfe has helped on nearly every release of BFMS with comprehensive test plans and a propensity to press buttons none of us ever expected anyone to press. His attention to detail has ensured each release meets a high standard of quality and reliability, and we’re excited to welcome him to the Engineering Office officially.

Patch Notes

Affiliate Commands

  1. Introduced Romulan and Klingon affiliate slots. These affiliate slots are separate from regular command slots. They can only be used for Romulan and Klingon commands, and Romulan and Klingon commands cannot be purchased in regular command slots.
  2. Members at the rank of Midshipman and above receive one free Romulan and one free Klingon affiliate slot. Each member is limited to one affiliate slot for each faction.
  3. Fleet Marketplace has been updated to show open affiliate slots.
  4. Fleet Marketplace has been updated to show pending affiliate slot purchases.
  5. Fleet Marketplace open and pending command slot logic has been updated to not consider affiliate commands as part of the regular slot logic.
  6. Fleet Marketplace Order Command logic has been updated, and depending on the slot type, it will show only classes not aligned to an affiliate or classes aligned to the specific affiliate for that slot type.
  7. Fleet Marketplace Replace Command logic has been updated to allow only swapping like-for-like as it relates to faction alignment. A command that is not aligned with an affiliate can only be swapped to another class that is not aligned to an affiliate, and a command that is aligned to an affiliate can only be swapped with another class of the same affiliate.
  8. The Command Units system has been updated to not consider affiliate commands for the purpose of determining eligibility.
  9. Command Units have been updated to exclude affiliate commands from being assignable as the flagship of a Command Unit.
  10. Character Ranks have been updated to now include equivalent Klingon and Romulan ranks.

Writing

  1. An optional author’s note feature has been added to stories, allowing the author to provide editorial comments, content warnings, background information, etc. This note, if the author includes it, shows in the story view above the story.
  2. Next Story and Previous Story buttons have been added to the story view to allow for a reader to easily traverse through the stories of a mission.
  3. Author information has been added to the right sidebar of the story view to provide better visibility into authorship in collaborative writing.
  4. Publish date has been added to the story view.
  5. A bug was resolved with pending command characters not showing up as assignable.
  6. A bug with cameo characters assigned to SBB was resolved.

Gaming

  1. Introduction of Gaming Events, along with management tools.
  2. Gaming Events have been added to the gaming page.

Marketplace (besides Affiliate Commands)

  1. Fixed assets that are not a member’s primary command no longer receive the designation of Squadron or Division. Instead, the logic has been updated to more clearly differentiate their unit members as Attached Ships.
  2. Sub-unit short summary field now shows up on the member profile, similar to how it shows for top-level units.
  3. Fleet Marketplace Refund Command workflow has been updated to include a message encouraging the user to use the Replace Command workflow instead if they are swapping out one command for another. The Replace Command workflow has an advantage that it’s one transaction, and in the future, it may also be updated with additional helpful logic that the Refund Command workflow won’t provide.
  4. Fleet Marketplace confirmation boxes have been updated to support special characters in command names.

Bolty

  1. Bolty now has the ability to announce promotions.
  2. Bolty now has the ability to announce awards.
  3. Bolty now has the ability to introduce new users on the Discord server.
  4. Bolty now handles Discord permissions when transfers are approved.

Other Changes

  1. Department staff sorting has been updated.
  2. Registry page now includes a separate section for Reserved commands.
  3. Registry page no longer shows Reserved commands when as part of Active status.
  4. Registry search in the admin panel has been updated.
  5. New member email and transfer request email have both been updated to resolve bugs.
  6. The date used in the member activity log for competition activity was updated to use the submission date rather than the competition date.
  7. Several improvements to promotion processing were made.
  8. A bug with how the member activity log shows competition organizing was resolved.
  9. A bug with unit assignment for AWOL transfers was resolved.
  10. A bug with reserves transfer requests was resolved.
  11. A display bug with single quotes in promotion records was resolved.
  12. A display bug with member names in gaming submissions was resolved.
  13. Changes were made related to several JAG-related features.
  14. Administrative tools for fleet and event statistics have been updated.

Load Time: 0.43 seconds

Total SQL Queries: 46

1 SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND wp_posts.post_name = 'engineering-office-report-10-v3-7-release' AND wp_posts.post_type = 'group_news' ORDER BY wp_posts.post_date DESC
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (34811) ORDER BY meta_id ASC
1 SELECT * FROM wp_posts WHERE ID = 150390 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 147856 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 147863 LIMIT 1
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (147856) ORDER BY meta_id ASC
1 SELECT * FROM wp_posts WHERE ID = 147857 LIMIT 1
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (147857) ORDER BY meta_id ASC
1 SELECT * FROM wp_posts WHERE ID = 94776 LIMIT 1
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (94776) ORDER BY meta_id ASC
1 SELECT wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'group_news' AND ((wp_posts.post_status = 'publish')) ORDER BY wp_posts.post_date DESC LIMIT 0, 2
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (18311) ORDER BY meta_id ASC
1 SELECT wp_posts.* FROM wp_posts WHERE ID IN (173993,173660)
1 SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('group_news_category') AND tr.object_id IN (173660, 173993) ORDER BY t.name ASC
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (173660,173993) ORDER BY meta_id ASC
1 SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND ( ( wp_postmeta.meta_key = 'event_status' AND wp_postmeta.meta_value = 'In Progress' ) AND ( mt1.meta_key = 'event_type' AND mt1.meta_value IN ('fleet_action','fiction_campaign') ) ) AND wp_posts.post_type = 'events' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_title DESC LIMIT 0, 1
1 SELECT wp_posts.* FROM wp_posts WHERE ID IN (170919)
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (170919) ORDER BY meta_id ASC
1 SELECT * FROM wp_posts WHERE ID = 32091 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 88217 LIMIT 1
1 SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN ('donate') AND post_type IN ('page','attachment')
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (94767) ORDER BY meta_id ASC
1 SELECT wp_posts.* FROM wp_posts WHERE ID IN (18311)
1 SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('group_news_category') AND tr.object_id IN (170257) ORDER BY t.name ASC
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (35402) ORDER BY meta_id ASC
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (170257) ORDER BY meta_id ASC
1 SELECT * FROM wp_users WHERE ID = '1' LIMIT 1
1 SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC
1 SELECT wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( ( wp_postmeta.meta_key = 'promoted_user' AND wp_postmeta.meta_value = '1' ) ) AND wp_posts.post_type = 'user_rank_assignment' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (17777) ORDER BY meta_id ASC
1 SELECT * FROM wp_posts WHERE ID = 134466 LIMIT 1
1 SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (134466) ORDER BY meta_id ASC
1 SELECT * FROM wp_posts WHERE ID = 94767 LIMIT 1
1 SELECT wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( ( wp_postmeta.meta_key = 'user' AND wp_postmeta.meta_value = '1' ) ) AND wp_posts.post_type = 'staff_record' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC
1 SELECT * FROM wp_posts WHERE ID = 34811 LIMIT 1
1 SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1 AND ( ( wp_postmeta.meta_key = 'member_user' AND wp_postmeta.meta_value = '1' ) ) AND wp_posts.post_type = 'member' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 1
1 SELECT * FROM wp_posts WHERE ID = 51367 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 51368 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 34810 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 34843 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 76594 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 34821 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 35407 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 34819 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 34817 LIMIT 1
1 SELECT * FROM wp_posts WHERE ID = 12371 LIMIT 1