Unified Board Item Model¶
Purpose¶
This file defines one canonical board-item contract for system-generated expedition offers.
Town boards, event boards, guild boards, and caravan boards should not need separate UI and storage models across different board sources. They should render one unified item shape with different origin refs and permission rules.
Core Rule¶
Every board-visible entry should be a board_item.
Creation path:
- generator writes
generated_offer
Display, expiry, claim state, filtering, permissions, and acceptance should all read from same board-item projection.
Why Unify¶
Without shared board item model, project gets duplicate logic for:
- board ordering
- urgency tags
- reason tags
- expiry and stale cleanup
- permission checks
- claim or acceptance state
- browser read models
One board item contract keeps town, event, guild, and caravan work on same rails.
Canonical Board Item Contract¶
Each board_item should contain at least:
board_item_iditem_kind:generated_offerboard_source:town_board,guild_board,event_board, orregional_caravan_boardboard_source_refboard_lane:emergency,system,guild_civic, oropportunityvisibility_scope:public,guild,party, orcontract-limitedregion_idarea_idif location-boundtarget_typetarget_refurgency_bandurgency_scorereward_classreason_tagsexpires_atcapacity_mode:single_claim,multi_claim, ornonexclusivestate:active,claimed,expired,completed,cancelledorigin_refseedif generator-authored
Optional but useful fields:
event_instance_refcontrol_window_reftown_condition_snapshot_refrecommended_group_sizerequired_knowledge_tagssuggested_loadout_tags
Source-Specific Attachments¶
Generated Offer¶
generated_offer board items should resolve back to:
expedition_offerexpedition_generation_runexpedition_board_context_snapshot
They inherit urgency, reason tags, and event or control refs from generator output.
Board Lanes and Coexistence Rules¶
System-generated civic work should be prioritized by urgency and board lane.
Use explicit board lanes:
emergency: crisis or high-severity system worksystem: normal generated town, event, or route workguild_civic: guild-issued civic or control-window workopportunity: lower-priority surplus or prosperity work
Recommended public board behavior:
- town boards keep reserved space for
emergencyandsystemlanes first - event boards should show system-generated event-response work
- guild boards can mix
guild_civicandsystemitems
Claim and Acceptance Modes¶
Board items should distinguish between visibility and claim behavior.
generated_offercan lead to expedition acceptance, delivery claim, or survey claim depending on the offer template
Recommended field:
claim_mode:accept_expedition,reserve_delivery, ordirect_turn_in
This keeps one board item shape while allowing different post-click flows.
Unified Board Projection¶
Client should read board_item_projection, not raw source tables.
Recommended projection fields:
board_item_iditem_kindboard_sourceboard_lanetitledestination_labelurgency_bandreward_classprimary_reason_tagissuer_summarywhere relevanttime_remainingclaim_statevisibility_scope
This keeps browser UI fast and lets filters work on one shared schema.
Ordering Rule¶
Ordering should happen in two stages:
- lane priority
- score inside lane
Recommended lane priority:
emergencyguild_civicsystemopportunity
Then use urgency, expiry pressure, and source score inside lane.
Expiry and Cleanup¶
All board items should expire through one cleanup path.
- generated offers expire from urgency and generator cadence
- claimed items may hide from public projection without deleting source records
Expiry should change board_item.state; it should not immediately destroy source rows needed for audit.
Permissions¶
Board access should be separate from item validity.
Examples:
- public town board visible to all, but some player contracts may still require renown or skill competence to claim
- guild board visible only to guild members above configured rank
- contract-limited items visible only to named recipients or party
Technical Records¶
Store:
board_itemboard_item_projectionboard_item_reason_tagboard_item_visibility_grantboard_item_claimboard_item_expiry_log
Reuse existing source records:
expedition_offerevent_instancetown_control_window
Commands¶
Support commands such as:
generate_system_offerrefresh_board_projectionclaim_board_itemaccept_board_itemexpire_board_item
Coordinator Model¶
Use board coordinators as read-model composers, not as alternate source-of-truth systems.
- town board coordinator merges generated civic work from all sources
- guild board coordinator merges governance work
- caravan board coordinator merges shipment and route work
Source systems keep authority. Board coordinators only project and order.
Example Items¶
Generated Emergency Item¶
item_kind:generated_offerboard_source:town_boardboard_lane:emergencytarget_type:resource_siteurgency_band:criticalprimary_reason_tag:shortage:medicine
Related Systems¶
- expedition generation model
- expedition acceptance and settlement model
- market, contracts, and logistics
- social, trade, and governance systems
- town simulation and supply