Files
aetherbound-guild/docs/content/CONTENT_INDEX.md

7.2 KiB

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 Generated name, modular appearance, rolls, profession, trait, equipment, level, price tier, rarity, and duplicate rules
PROFESSION_CATALOG.md 12 base, 24 regular advanced, and 6 hidden hybrid professions
TRAIT_CATALOG.md 36 one-per-recruit mechanical traits
EQUIPMENT_CATALOG.md 320 unit equipment identities
ARTIFACT_CATALOG.md 60 run-wide rule modifiers
REGION_CATALOG.md 8 regions, progression pressure, encounter grammar, and production ledger
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.

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}}'
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'
! 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.