# Content Matrix Authority > Revision: `abg-v2-content-r1` > > Scope: generated recruits and combat content for the design-only > recruit-line auto-battler defined by `.agent-taskgraph/spec.md` revision > `design-spec-r2`. ## Authority And Boundaries The frozen specification and later integrated product rules outrank this package. This package owns identities, catalog relationships, content-facing triggers, tradeoffs, counters, and production briefs. It does not own combat formulas, prices, save transactions, UI layouts, runtime code, or final media. All names and rules here are independently authored for Aetherbound Guild. Authorized private reference material informed only the need for readable party order, role telegraphs, equipment decisions, milestone pivots, and separate gameplay and production ledgers. No reference names, prose, formulas, layouts, progression topology, code, or commercial assets are reproduced. The former authored-cast and social-story assumptions, multi-lane formation, and fixed deployment-size assumptions are obsolete. Achievements and collection screen content are intentionally outside this Goal and require a later frozen contract; their removed legacy document is not replaced by invented scope. ## Package Map | Authority | Exact owned content | |---|---| | [RECRUIT_GENERATION.md](RECRUIT_GENERATION.md) | Generated name, modular appearance, rolls, profession, trait, equipment, level, price tier, rarity, and duplicate rules | | [PROFESSION_CATALOG.md](PROFESSION_CATALOG.md) | 12 base, 24 regular advanced, and 6 hidden hybrid professions | | [TRAIT_CATALOG.md](TRAIT_CATALOG.md) | 36 one-per-recruit mechanical traits | | [EQUIPMENT_CATALOG.md](EQUIPMENT_CATALOG.md) | 320 unit equipment identities | | [ARTIFACT_CATALOG.md](ARTIFACT_CATALOG.md) | 60 run-wide rule modifiers | | [REGION_CATALOG.md](REGION_CATALOG.md) | 8 regions, progression pressure, encounter grammar, and production ledger | | [ENEMY_CATALOG.md](ENEMY_CATALOG.md) | 100 ordinary/elite enemies and 16 bosses | ## Stable ID Namespaces | Pattern | Meaning | Required total | |---|---|---:| | `PF-B01..PF-B12` | Base profession | 12 | | `PF-A01..PF-A24` | Regular advanced profession | 24 | | `PF-H01..PF-H06` | Hidden hybrid profession | 6 | | `TR-001..TR-036` | Recruit trait | 36 | | `EQ-001..EQ-320` | Equipment | 320 | | `AR-001..AR-060` | Artifact | 60 | | `RG-01..RG-08` | Region | 8 | | `EN-Rx-yy` | Ordinary or elite enemy assigned to region `x` | 100 total | | `BO-Rx-yy` | Boss assigned to region `x` | 16 total | IDs are immutable after owner approval. Renaming display text does not change an ID. Rarity, level, palette, portrait part, animation frame, and elite combat state never create another identity. ## Shared Content Vocabulary The vocabulary is semantic so integration can map it to the core system's numeric formulas without content inventing a second simulator. | Term | Content meaning | |---|---| | front / center / rear band | Semantic order preference: front is nearest the enemy, rear is farthest, and center is between; integrated core rules own segmentation and short-line ties | | foremost / rearmost | Living unit nearest the front or rear end of its line | | neighbor | Immediately adjacent living unit after collapse is resolved | | behind / ahead | Relative order, never a separate lane | | reach N | May select through at most `N-1` intervening living units; `line` reaches any legal unit | | step / swap / push / pull | Discrete order changes resolved by the core movement transaction | | collapse | The deterministic closing of a vacant position after death, dismissal is never a battle action | | reserve | Owned recruit not currently deployed; not a hidden battle slot | | cadence | One unit's basic-action timing cycle | | wind-up | Telegraph interval before an action resolves | | interrupt | A declared cancellation rule, never an implied chance | | marked / guarded / hindered / exposed | Visible content tags whose numeric implementation belongs to core rules | | Parts, Focus, Verse, Remedy, Guard | Profession-local meters or tokens; each profession row defines gain and spend behavior | | behavior class `B` | Changes targeting, timing, reach, order, resource flow, status rules, or profession behavior | | tradeoff class `T` | Changes a choice through a visible conditional benefit and cost but does not rewrite a core hook | Equipment must have at least 160 `B` rows. Artifacts never attach to one unit: they modify shop, route, reward, loss, formation, encounter, or other run-wide rules. A row is filler if its display name can change without changing a trigger, legal target, counterfactual, or production brief. ## Production Brief Codes Every identity carries a compact production brief. These are planning counts, not generated or final assets. | Code | Required deliverable | |---|---| | `I` | Inventory/preview icon plus monochrome accessibility silhouette | | `O` | Modular actor overlay or held-object layer | | `A` | Reusable animation family and identity-specific timing note | | `V` | VFX cue with reduced-motion state and non-color shape cue | | `S` | SFX event role, caption token, and speed-safe mix note | | `P` | Portrait/body-part family or enemy silhouette kit | | `E` | Environment layer, hazard cue, or encounter prop | | `M` | Music-state or boss transition requirement | A row such as `I/O/V/S` requests all four deliverables. Reuse keys appear in the row text; reuse never permits identical threat silhouettes where the player must distinguish behavior. ## Automated Acceptance Checks Run from the repository root. The first command verifies exact unique totals from the defining authorities; the second verifies contiguous numeric namespaces; the third rejects legacy requirements inside the product-facing content authorities. ```sh ruby -e 'x={"PROFESSION_CATALOG.md"=>[/^\| `(PF-B\d{2})`/,12,/^\| `(PF-A\d{2})`/,24,/^\| `(PF-H\d{2})`/,6],"TRAIT_CATALOG.md"=>[/^\| `(TR-\d{3})`/,36],"EQUIPMENT_CATALOG.md"=>[/^\| `(EQ-\d{3})`/,320],"ARTIFACT_CATALOG.md"=>[/^\| `(AR-\d{3})`/,60],"REGION_CATALOG.md"=>[/^\| `(RG-\d{2})`/,8],"ENEMY_CATALOG.md"=>[/^\| `(EN-R\d-\d{2})`/,100,/^\| `(BO-R\d-\d{2})`/,16]}; x.each{|f,a| s=File.read("docs/content/#{f}"); a.each_slice(2){|r,n| abort "#{f}: #{r}" unless s.scan(r).flatten.uniq.length==n}}' ``` ```sh ruby -e 's=File.read("docs/content/EQUIPMENT_CATALOG.md"); a=s.scan(/^\| `EQ-(\d{3})`/).flatten.map(&:to_i); abort "equipment gap" unless a==(1..320).to_a; s=File.read("docs/content/ARTIFACT_CATALOG.md"); a=s.scan(/^\| `AR-(\d{3})`/).flatten.map(&:to_i); abort "artifact gap" unless a==(1..60).to_a; s=File.read("docs/content/TRAIT_CATALOG.md"); a=s.scan(/^\| `TR-(\d{3})`/).flatten.map(&:to_i); abort "trait gap" unless a==(1..36).to_a' ``` ```sh ! rg -ni '\b(fixed (hero|protagonist)|relationship|affinity|romance|personal[- ]arc|three[- ]lane|six-unit|Directive|Anchor|Cache)\b|front/rear grid' docs/content/{RECRUIT_GENERATION,PROFESSION_CATALOG,TRAIT_CATALOG,EQUIPMENT_CATALOG,ARTIFACT_CATALOG,REGION_CATALOG,ENEMY_CATALOG}.md ``` Integration must additionally resolve every backticked ID against these namespaces, compare product hook names, and independently review whether each row changes an actual decision. Exact counts are a necessary gate, not proof of fun, comprehension, balance, visual quality, listening quality, or owner approval.