Skip to content

2026-04-25-mission-composition-grammar

Mission Composition Grammar — Verb Vocabulary + Affinity Tags

Section titled “Mission Composition Grammar — Verb Vocabulary + Affinity Tags”

Status: Draft design for post-v0.1 wave (Notion: GWP-277) Date: 2026-04-25 Owner: Gameplay Design / PM (GWP-277) Scope: Defines the Mission Composition Grammar (MCG) — a generative layer that lets the nOSh Mission Board compose narratively coherent multi-phase contracts from any subset of the operator’s cart library. This document specifies the foundation pieces: the phase verb vocabulary, the affinity tag system, and the new mission-contributions cart contribution block. Companion sections (mission shape grammar, genre template library, composition algorithm reference implementation) ship as separate sub-task plans. Non-scope: No C, no Lisp runtime changes, no emulator source edits. This document defines the design surface — the algorithm reference implementation lives in the engineering sub-task (Notion: GWP-277 → “Engineering: MCG composition algorithm”).

Hardware spec references — this design targets the canonical 80×25 amber grid, 31-key input system, CIPHER-LINE auxiliary OLED, and Pi Zero 2 W firmware described in CLAUDE.md → “Canonical Hardware Specification”. Nothing in this doc restates those values.

Augments, does not supersede. This plan extends 2026-04-21-mission-board.md (the Mission Board generator design) and docs/software/runtime/orchestration.md §Cross-Program Integration. The “hand-authored cross-pair” examples in that section (ICE×BL, ICE×DC, NG×IB, BL×SF) remain valid as worked examples; this plan generalizes them into a procedural grammar that scales past the four-cart launch library.


The Capability Model Spec (docs/software/runtime/orchestration.md) describes cross-program integration as a set of hand-authored cartridge pairs. At the four-cart launch library this is fine — there are six pairs and Josh has authored them all. At the full 14-cart library the combinatorics break:

Library sizePairsTriplesQuads
4 carts641
8 carts285670
14 carts913641,001

Hand-authoring 91 pairs is awkward but possible; 364 triples is not. The Mission Board needs a generative grammar that produces coherent multi-phase contracts from any subset of the operator’s library, with payouts and threat scaling against the chain length and cross-cart affinity distance.

This plan does not invalidate hand-authored pairs. They become seed corpus for the genre templates (§4 below); the generator falls back to hand-authored content when the operator’s library is small enough that it covers everything.


Design constraints (carried in from upstream)

Section titled “Design constraints (carried in from upstream)”

These are the load-bearing constraints from the existing Capability Model spec that the MCG must respect:

  1. Cross-program integration is always additive, never subtractive. No mission, no feature, no capability is locked behind another module. The single-cartridge experience is complete. — orchestration.md §Cross-Program Integration → Design Principle.
  2. Single-cartridge career is complete. ICE Breaker alone delivers a full board, threat 1–6, hundreds of hours. The MCG cannot demand multi-cart minimums. — orchestration.md §The Capability Curve → One Cartridge.
  3. Multi-phase missions serialize into the existing 256-byte phase_chain deck-state slot. No deck-state schema changes for v1 of the MCG. — orchestration.md §Multi-Phase Missions.
  4. .kn86 v2 container compatibility. New cart contribution block must be a named MISSION_CONTRIBUTIONS section parseable by the existing loader (ADR-0006 §Container Format). Extend the vocabulary; don’t break the parser.
  5. Cipher voice composes across phases. The CIPHER-LINE coherence stack (5 slots, persists across cart swaps in deck state) carries narrative continuity through a generated chain. The MCG composer emits a Cipher event stream; the engine narrates. — ADR-0015 + docs/software/runtime/cipher-voice.md.

Every cart declares which canonical verbs its phase handlers can satisfy. The vocabulary is small and closed — exactly 10 verbs. Closing the set is intentional: it forces every cart to map to a shared semantic surface, and it makes the composition algorithm’s verb-to-cart filter a simple bitmask.

VerbMeaningExample domains
PENETRATEGain access to a defended target.Network node (ICE Breaker), guarded compartment (Depthcharge), restricted airspace (NIGHTOWL — concept)
OBTAINAcquire a specific asset and bring it back.Data (ICE Breaker), cargo (Depthcharge), credentials (any), evidence (Black Ledger)
ANALYZEInterpret, decode, or synthesize information.Cipher (Cipher Garden), ledger (Black Ledger), market signal (SynthFence), archive (The Vault)
DELIVERMove a payload from A to B.Package (Pathfinder), data drop (Drift), cargo (Depthcharge)
DESTROYSabotage, corrupt, or render unusable.Network asset (ICE Breaker), signal (Shellfire), evidence trail (Black Ledger inverse)
OBSERVEGather without intervention; passive collection.Surveillance (Drift), reconnaissance (Depthcharge), tail (Pathfinder)
COMMUNICATEBroadcast, transmit, or contact.Pirate broadcast (Marty’s Glitch), update push (Relay), dead drop (Drift)
MANUFACTUREProduce a physical or virtual artifact.Identity (CLONESHOP — concept), compound (SYNAPTIC — concept), graft (WETWARE — concept)
NEGOTIATEConvert influence or social leverage into outcome.Boardroom (HOSTILE TAKEOVER — concept), street contact (Threshold), party action (Threshold)
DECIDEStrategic commitment; commit to an irrevocable move.Tactical move (Takezo), territory placement (Nodespace), market position (SynthFence)

Notes:

  • Carts may satisfy multiple verbs. ICE Breaker satisfies {PENETRATE, OBTAIN, DESTROY, OBSERVE}. Black Ledger satisfies {ANALYZE, OBSERVE}. The Vault satisfies {ANALYZE, OBSERVE} (passively, with :passive modifier).
  • Verbs are closed for v1. Adding new verbs requires an ADR. Unrecognized verbs in a cart’s contribution block are dropped at parse time with a load-time warning.
  • Cipher Garden is currently unscored against the verb set — its contribution is closer to a modifier than a verb (it raises cipher confidence index in deck state). Treated as {ANALYZE :passive} for MCG purposes, special-cased in the algorithm. See open question Q1.

Every cart carries a set of affinity tags describing its narrative domain. Tags are how the composition algorithm decides whether two phases can chain coherently — adjacent phases must share at least one affinity OR have a sanctioned cross-affinity transition.

TagMeaningExample carts
DIGITALNetworks, data, code, virtual systems.ICE Breaker, Cipher Garden, The Vault, Relay
FINANCIALMoney, ledgers, markets, transactions.Black Ledger, SynthFence
AERIALAbove-ground, atmospheric, aviation.NIGHTOWL (concept), Drift (signal-tracking subset)
MARITIMEBelow-surface, oceanic, coastal.Depthcharge, Drift
BODYPhysical anatomy, wetware, biology.WETWARE (concept), RECITATION (concept)
IDENTITYPersona, biometrics, social proof, legal.CLONESHOP (concept), GHOSTLINE (concept), Threshold (party-roles subset)
PHYSICALMaterial world, locations, spatial.NeonGrid, Pathfinder, Threshold, Depthcharge
NETWORKTopology, relationships, social graph.Nodespace, ICE Breaker, BLACK SUN (concept)
CHEMICALSubstances, formulation, biochemistry.SYNAPTIC (concept)
SOCIALNegotiation, influence, manipulation, talk.Threshold, HOSTILE TAKEOVER (concept), Marty’s Glitch
INFORMATIONRecords, archives, signals, intelligence.The Vault, Drift, TRANSMISSION (concept), GARGOYLE (concept)

Notes:

  • Carts typically carry 2–4 tags. ICE Breaker = {DIGITAL, NETWORK}. NeonGrid = {PHYSICAL}. Black Ledger = {FINANCIAL, INFORMATION}. Pathfinder = {PHYSICAL, MARITIME?, AERIAL?} (multimodal — see open question Q2).
  • Tag set is mostly closed for v1. Adding a tag requires an ADR or this plan’s promotion to definitive (whichever lands first). The 11 tags above were chosen to cover the existing 14 launch carts plus the 15 brainstormed concepts (see Notion task: “Concept library: 15 candidate cyberpunk cartridges”).
  • A cart may carry modifier flags alongside tags: :passive (cart enables but doesn’t anchor a phase — The Vault, Cipher Garden), :bridge (cart can satisfy a cross-affinity transition that would otherwise be forbidden — WETWARE bridges DIGITAL→BODY).

When two adjacent phases in a generated chain do not share an affinity, the algorithm consults this table. If the transition is sanctioned, the chain proceeds with a Cipher narrative bridge fragment. If not, the algorithm rejects the chain and rolls a different cart.

From → ToSanctioned?Narrative justification
DIGITAL → FINANCIALData trail leads to bank records.
FINANCIAL → DIGITALTransaction record leaks credentials.
DIGITAL → INFORMATIONExtracted data goes to archive.
INFORMATION → DIGITALArchive query reveals an exploitable pattern.
DIGITAL → NETWORKNetwork topology revealed.
NETWORK → DIGITALStrategic position calls for an intrusion.
MARITIME → PHYSICALSub surfaces; courier picks up cargo.
PHYSICAL → MARITIMECourier hands off at the dock.
AERIAL → PHYSICALDrone drop; ground retrieval.
PHYSICAL → AERIALGround signal calls down a drone.
INFORMATION → SOCIALIntelligence enables a negotiation.
SOCIAL → INFORMATIONConversation surfaces a leak.
SOCIAL → IDENTITYSocial leverage builds a persona.
IDENTITY → SOCIALForged identity walks into a room.
FINANCIAL → SOCIALMoney buys access.
SOCIAL → FINANCIALNegotiation produces a payment.
DIGITAL → BODY⚠️ requires :bridge cartWetware mediation needed (WETWARE bridges).
BODY → DIGITAL⚠️ requires :bridge cartNeural extraction to data form.
CHEMICAL → BODYCompound administered to subject.
BODY → CHEMICALBiopsy yields compound trace.
Anything → INFORMATIONThe Vault accepts everything as input.
INFORMATION → Anything⚠️ rep-gatedArchive query alone doesn’t justify acting; only at rep ≥ 15 does the generator allow this fan-out.

Transitions not listed are forbidden. The algorithm rolls a different cart and re-checks. If the operator’s library cannot satisfy a coherent chain after N rolls, the generator falls back to a shorter shape (see §4 Composition Algorithm step 5).


§3. New cart contribution block: mission-contributions

Section titled “§3. New cart contribution block: mission-contributions”

The cart contribution model in docs/software/runtime/orchestration.md already lists six declarable blocks (Program code, Mission templates, Behavior tables, Generation data, cipher-grammar, Per-cartridge save data). This plan adds a seventh:

BlockPurposeConsumer
mission-contributionsVerb vocabulary, affinity tag set, modifier flags, sanctioned transition overridesnOSh runtime Mission Composition Grammar

The block is a Lisp s-expression embedded in the cart’s flash, parsed at cartridge load. The format mirrors the cipher-grammar block’s structure (named container section, ADR-0006).

(mission-contributions
:verbs (PENETRATE OBTAIN DESTROY OBSERVE)
:affinities (DIGITAL NETWORK)
:modifiers ()
:transition-overrides ()
:payout-bias 1.0
:threat-bias 0)

Field reference:

FieldTypeRequiredDefaultMeaning
:verbslist of verb symbolsVerbs this cart’s phase handlers can satisfy. Must be drawn from §1 vocabulary.
:affinitieslist of tag symbolsAffinity tags this cart carries. Must be drawn from §2 set.
:modifierslist of modifier symbols():passive, :bridge, or future modifiers.
:transition-overridesa-list of (FROM TO) pairs()Cart-specific sanctioned transitions beyond §2 table. Used sparingly.
:payout-biasfloat in [0.5, 2.0]1.0Multiplier applied to phases satisfied by this cart. SynthFence might bias 1.2× for high-stakes domain; Null might bias 0.7× for diagnostic-flavored phases.
:threat-biasint in [-2, +2]0Threat-level adjustment for phases satisfied by this cart. Positive = harder; negative = easier.

Worked declarations for the four launch carts:

;; ICE Breaker
(mission-contributions
:verbs (PENETRATE OBTAIN DESTROY OBSERVE)
:affinities (DIGITAL NETWORK))
;; NeonGrid
(mission-contributions
:verbs (PENETRATE OBSERVE DECIDE)
:affinities (PHYSICAL))
;; Black Ledger
(mission-contributions
:verbs (ANALYZE OBSERVE OBTAIN)
:affinities (FINANCIAL INFORMATION))
;; Depthcharge
(mission-contributions
:verbs (PENETRATE OBTAIN OBSERVE DELIVER)
:affinities (MARITIME PHYSICAL))

Backfilling all 14 launch carts is tracked in Notion: GWP-277 → “Backfill: Declare MCG verbs + affinities on all 14 launch carts”.

  • Block is optional for v1. Carts without mission-contributions are excluded from MCG generation; legacy hand-authored cross-pair behavior continues to work for them. The Mission Board logs a load-time INFO event for missing-block carts.
  • Unknown verb symbols → dropped at parse, load-time warning emitted.
  • Unknown affinity symbols → dropped at parse, load-time warning emitted.
  • Unknown modifier symbols → ignored silently (forward compatibility).
  • Required fields missing → block rejected, cart treated as no-MCG-block (degrade gracefully).

The full algorithm spec — including topology shapes (MONO/CHAIN/BRANCH/PARALLEL/EPISODIC/NESTED/ESCALATION/ECHO), genre template library (HEIST/EXPOSE/ELIMINATE/EMPIRE/GHOST/REVENGE/DISCOVERY/CONTAGION/COURIER/AUDIT), and the reference C implementation — ships in companion sub-tasks (Notion: GWP-277 sub-tasks 2–4). This section is a sketch so the verb/affinity foundation can be reviewed in context.

Topology shapes — see 2026-04-25-mission-shape-grammar.md. That plan specifies all eight shapes with phase-graph notation, when-to-fire heuristics, payout topology multipliers, 256-byte phase_chain serialization layouts, fallback rules, and cross-shape composition rules. It also bakes in the resolution to this plan’s open question Q3 (cross-affinity transitions are declared per-genre via :allowed-transitions, not by expanding the §2 table).

Input: operator deck state (rep, credits, capability_mask, cipher_seed)
loaded cart pool (subset of operator library currently inserted + relay overlay)
1. ROLL GENRE
Pick a genre template weighted by reputation tier and recent-genre history
(avoid repetition). Each genre carries a verb sequence skeleton.
See `2026-04-25-mission-genre-templates.md` for the v1 library of 10
hand-crafted genre templates (HEIST, EXPOSE, ELIMINATE, EMPIRE, GHOST,
REVENGE, DISCOVERY, CONTAGION, COURIER, AUDIT) with verb sequences,
Cipher voice register biases, payout classes, complication slot pools,
and `:allowed-transitions` overrides.
2. INSTANTIATE PHASES
For each verb in the genre's skeleton:
a. Filter cart pool by verb-satisfiers (carts whose :verbs contains the verb)
b. Apply affinity coherence filter against prior phase's cart
(shared affinity OR sanctioned cross-affinity transition; consult §2 table)
c. Roll one cart from survivors (LFSR-seeded from MissionBoardGen.board_seed)
d. If no survivor: emit MISSING_CART_HOOK with the verb + suggested cart
(mission appears greyed out on board with hint "PHASE N REQUIRES: <CART>")
3. RESOLVE SUBSTITUTION SLOTS
If a phase can be satisfied by multiple carts in operator's library, mark it
as a substitution slot. Player picks at acceptance time. (UX: deferred to
sub-task 4 engineering; v1 picks the highest-:payout-bias cart automatically.)
4. PAD WITH COMPLICATIONS
Roll 0–2 complications from the genre's complication pool. Complications add
a sub-objective or a constraint to one of the phases. (Threshold-style social
complications, time pressure, cargo damage, etc.)
5. COMPUTE PAYOUT
total = sum(phase_base_payout × cart.payout_bias)
× topology_multiplier (1.0 for MONO, 1.2 for 2-CHAIN, 1.5 for 3-CHAIN,
2.0 for 4-CHAIN, +0.3 per BRANCH path, etc.)
× cross_cart_multiplier (1.0 if all phases same cart; +0.1 per distinct
cart; capped at 2.0)
× threat_multiplier (1.0 + 0.15 × threat_level)
6. GENERATE CIPHER WRAPPER
Emit `mission_generated{contract_id, narrative_seed, genre, phases[]}`
into the Cipher event stream. Engine composes brief / inter-phase fragments
/ closer per its mode-selector rules (Cipher Voice spec).
Output: a MissionInstance ready to be added to the live board.

Implementation notes:

  • Step 2c’s LFSR seeding uses the board-seed (per 2026-04-21-mission-board.md §Seed advancement rules), not the global cipher_seed. This keeps Cipher’s deck-state seed budget independent of board churn.
  • Step 4’s complication pool is genre-scoped; a HEIST might roll “alarm tripped early” while a GHOST might roll “biometric spoof degrades at 60% time.”
  • Step 6’s payload includes the narrative_seed (per the existing MissionInstance shape) so Cipher’s per-contract utterances are reproducible.

§5. Worked example — 4-cart REVENGE chain

Section titled “§5. Worked example — 4-cart REVENGE chain”

Operator library: ICE Breaker, Black Ledger, NIGHTOWL (concept), CLONESHOP (concept). Reputation 18 (rep tier 2). Cipher seed 0x8A3F1C04.

Step 1 — Genre roll: REVENGE (weighted up at rep tier 2; not seen in last 6 contracts).

REVENGE skeleton: (research → manufacture → deploy → consequence) mapping to verbs (OBSERVE → MANUFACTURE → DELIVER → ANALYZE).

Step 2 — Instantiate phases:

PhaseVerbSurvivors after verb filterSurvivors after affinity filterPicked cartDomain
1OBSERVEICE Breaker, Black Ledger, (Drift if loaded), (NeonGrid if loaded)(no prior phase; all pass)ICE Breaker (LFSR roll)Compromise corp executive’s email cache
2MANUFACTURECLONESHOPDIGITAL → IDENTITY (sanctioned: extracted data → forged persona)CLONESHOPFabricate “former mistress” identity from email cache
3DELIVERNIGHTOWLIDENTITY → AERIAL (sanctioned: ground signal calls drone, transitive via PHYSICAL) — fails strict check, see noteNIGHTOWL (override via genre template’s allowed transitions)Drone-drop the dossier at executive’s HOA meeting
4ANALYZEBlack LedgerAERIAL → FINANCIAL (sanctioned via PHYSICAL bridge — also weak, see open question Q3)Black LedgerTrace executive’s panic-sale stock dump for resale to a short-seller

Step 3 — Substitution slots: none (each verb had only one satisfier in the operator’s library).

Step 4 — Complications: roll 1. Picked: “target’s HOA has corporate counter-surveillance” (adds threat +1 to phase 3).

Step 5 — Payout:

phase_base × cart.payout_bias:
Phase 1: 800 × 1.0 = 800 (ICE Breaker)
Phase 2: 1,200 × 1.0 = 1,200 (CLONESHOP, hypothetical bias)
Phase 3: 1,000 × 1.0 = 1,000 (NIGHTOWL, hypothetical bias)
Phase 4: 900 × 1.0 = 900 (Black Ledger)
sum = 3,900
× topology_multiplier (4-CHAIN): 2.0 → 7,800
× cross_cart_multiplier (4 distinct carts): 1.4 → 10,920
× threat_multiplier (threat 4 from rep tier + complication): 1.6 → 17,472
Final payout: ¤17,472

Step 6 — Cipher wrapper: event emitted; engine composes brief at acceptance, fragment at each cart swap, closer at debrief.

This mission would never have been hand-authored — but it’s coherent, dramatic, and pays well.


Per CLAUDE.md Spec Hygiene Rule 3, this plan changes vocabulary used elsewhere in the corpus. Tracked sweep:

  • docs/software/runtime/orchestration.md §Cross-Program Integration — add forward pointer to this plan. (Done in this PR.)
  • docs/plans/post-v0.1/2026-04-21-mission-board.md — add cross-reference at top so the mission-board plan reader knows about MCG. (Done in this PR.)
  • Mission shape grammar — landed 2026-04-25 (GWP-279). 2026-04-25-mission-shape-grammar.md specifies all eight topology shapes with serialization, fire heuristics, and fallback rules. Bakes in this plan’s Q3 resolution.
  • docs/plans/README.md — add this plan to the index table. (Not done in this PR — the post-v0.1 directory is not enumerated in the parent README; the directory is referenced as a whole.)
  • docs/_meta/definitive-articles.md — no change required; WORKING tier docs are not enumerated there. Will register on graduation to DEFINITIVE.
  • docs/software/runtime/orchestration.md §Cartridge Contribution Model — mission-contributions row added to the block table (GWP-282, 2026-04-25). The runtime wiring still depends on the algorithm sub-task (GWP-277 sub-task 4); the table entry forward-references the working spec until it graduates to DEFINITIVE.
  • All 14 launch cart specs in docs/software/cartridges/modules/ (plus Threshold, launch-adjacent) — mission-contributions declarations backfilled (GWP-282, 2026-04-25). Coverage matrix confirms every verb except MANUFACTURE and NEGOTIATE has ≥2 satisfiers; under-satisfied verbs and affinity tags (BODY, CHEMICAL, IDENTITY, SOCIAL — currently ≤1 satisfier each in the launch library) are documented in the GWP-282 PR description and remain real coverage gaps that concept carts (HOSTILE TAKEOVER, CLONESHOP, WETWARE, SYNAPTIC) will close in subsequent waves.
  • Genre template library (10 hand-crafted skeletons) — authored in 2026-04-25-mission-genre-templates.md. Resolves Q1 (passive carts as modifiers, never anchors), Q3 (per-genre :allowed-transitions overrides), and Q5 (per-genre Cipher mode bias) from §7 below.

When this plan graduates (via ADR or as a new spec doc under docs/software/runtime/), the deferred items become hard requirements per Spec Hygiene Rule 3.


Q1 — Cipher Garden / The Vault as :passive carts. Both contribute to deck state (cipher confidence index, knowledge index) rather than running phase handlers in the conventional sense. They satisfy ANALYZE :passive for MCG purposes but the algorithm should probably never roll them as a phase anchor — they should always appear as modifiers boosting phases satisfied by other carts. Resolve before sub-task 4 engineering lands.

Q2 — Multi-environment carts (Pathfinder, Drift). Pathfinder operates in {PHYSICAL, MARITIME?, AERIAL?} depending on the route. Drift’s signal-tracking subset is {INFORMATION} but its dead-drop subset is {PHYSICAL, MARITIME}. Should :affinities be a flat list, or should the cart declare per-verb affinity sets? Recommendation: flat list for v1 (simpler parser, simpler algorithm); revisit if the resulting compositions feel imprecise.

Q3 — Indirect transitions (AERIAL → FINANCIAL via PHYSICAL). The §5 worked example bridges AERIAL → FINANCIAL through an unstated PHYSICAL intermediate (“drone delivers dossier; HOA financial spillover”). The transition table (§2) doesn’t sanction this directly. Two options: (a) expand the table with second-order transitions; (b) require genre templates to declare allowed transition overrides. Recommendation: (b) — keeps the table small and pushes narrative judgment into the genre layer where it belongs.

Q4 — Cart pool eligibility during multi-phase chains. §1 of 2026-04-21-mission-board.md notes that contracts requiring an ejected cartridge survive as “locked” rows. Should the MCG generator emit chains requiring carts the operator owns but doesn’t currently have inserted (i.e., the chain assumes Hot Swap)? Recommendation: yes — this is the original Hot Swap design intent. The MISSING_CART_HOOK in step 2d covers carts the operator doesn’t own; carts owned-but-not-inserted produce normal chains with cart-swap prompts at phase boundaries.

Q5 — Cipher mode bias from genre. Should the genre template declare a Cipher mode bias (e.g., REVENGE → biased toward reflect and drift modes; HEIST → biased toward observe)? Resolve in the genre template sub-task (GWP-277 sub-task 3) — affects cipher-grammar’s mode-weight schema.


  • Verb vocabulary defined (§1)
  • Affinity tag set + cross-affinity transition table defined (§2)
  • mission-contributions cart contribution block schema defined (§3)
  • Composition algorithm sketched (§4); reference implementation deferred to engineering sub-task
  • Worked example demonstrates a generated 4-cart chain (§5)
  • Spec hygiene sweep enumerated (§6)
  • Open questions captured (§7)
  • Cross-references to companion sub-tasks (Notion: GWP-277)