diff --git a/.gitignore b/.gitignore index 3cbd627..722922d 100644 --- a/.gitignore +++ b/.gitignore @@ -50,5 +50,8 @@ cover.out # Local config config.toml !config.example.toml +.env +bte-promo-script/.env +bte-promo-script/secrets.env cmd/kubectl-gt/kubectl-gt cmd/kubectl-gt/bin/kubectl-gt-* diff --git a/Makefile b/Makefile index 641b824..8df1171 100644 --- a/Makefile +++ b/Makefile @@ -118,6 +118,10 @@ demo: setup-test-e2e docker-build-e2e ## Deploy to Kind and show a sample Poleca @echo "Cleanup:" @echo " make cleanup-test-e2e" +.PHONY: demo-docker-desktop +demo-docker-desktop: ## Deploy BTE infra (operator + madeye-proxy + Rig) to Docker Desktop K8s. + ./bte-promo-script/deploy/deploy-infra.sh + .PHONY: smoke-test smoke-test: ## Smoke test published release artifacts in Kind (requires VERSION). ./scripts/smoke-test.sh --version $(VERSION) @@ -373,7 +377,7 @@ endef .PHONY: polecat-agent-build polecat-agent-build: ## Build polecat-agent image locally (single arch). - docker build -t polecat-agent:local images/polecat-agent/ + docker build -f images/polecat-agent/Dockerfile -t polecat-agent:local . .PHONY: polecat-agent-release polecat-agent-release: ## Build and push polecat-agent with SBOM and Trivy scan. diff --git a/api/v1alpha1/polecat_types.go b/api/v1alpha1/polecat_types.go index aad6443..78a92e9 100644 --- a/api/v1alpha1/polecat_types.go +++ b/api/v1alpha1/polecat_types.go @@ -151,9 +151,9 @@ type AgentConfig struct { // KubernetesSpec defines configuration for kubernetes execution mode type KubernetesSpec struct { // GitRepository is the git repo URL to clone (SSH or HTTPS format) - // +kubebuilder:validation:Required - // +kubebuilder:validation:Pattern=`^(git@[a-zA-Z0-9._-]+:|https?://[a-zA-Z0-9._-]+/)[a-zA-Z0-9._/-]+(\.git)?$` - GitRepository string `json:"gitRepository"` + // Required unless SkipGitInit is true. Format validated by admission webhook. + // +optional + GitRepository string `json:"gitRepository,omitempty"` // GitBranch is the branch to checkout // +kubebuilder:default=main @@ -167,8 +167,20 @@ type KubernetesSpec struct { WorkBranch string `json:"workBranch,omitempty"` // GitSecretRef references a Secret containing SSH key for git - // +kubebuilder:validation:Required - GitSecretRef SecretReference `json:"gitSecretRef"` + // Required unless SkipGitInit is true. + // +optional + GitSecretRef SecretReference `json:"gitSecretRef,omitempty"` + + // SkipGitInit skips git clone/checkout and uses a static workspace baked into the agent image. + // A workspace-init container copies /opt/bte-promo-tool into WorkspacePath on an emptyDir volume. + // +optional + SkipGitInit bool `json:"skipGitInit,omitempty"` + + // WorkspacePath is the working directory for the agent when SkipGitInit is true. + // Defaults to /workspace/promo-tool. + // +kubebuilder:validation:Pattern=`^/[a-zA-Z0-9._/-]+$` + // +optional + WorkspacePath string `json:"workspacePath,omitempty"` // ClaudeCredsSecretRef references a Secret containing ~/.claude/ contents // Required unless ApiKeySecretRef is provided diff --git a/api/v1alpha1/polecat_webhook.go b/api/v1alpha1/polecat_webhook.go index a26018d..44d5b34 100644 --- a/api/v1alpha1/polecat_webhook.go +++ b/api/v1alpha1/polecat_webhook.go @@ -94,7 +94,7 @@ func (v *PolecatCustomValidator) validatePolecat(polecat *Polecat) (admission.Wa if polecat.Spec.Kubernetes == nil { allErrs = append(allErrs, "spec.kubernetes: is required when executionMode is 'kubernetes'") } else { - errs := validateKubernetesSpec(polecat.Spec.Kubernetes) + errs := validateKubernetesSpec(polecat.Spec.Kubernetes, polecat.Spec.AgentConfig) allErrs = append(allErrs, errs...) } } @@ -163,17 +163,32 @@ func containsPathTraversal(s string) bool { } // validateKubernetesSpec validates the kubernetes execution spec. -func validateKubernetesSpec(k *KubernetesSpec) []string { +func validateKubernetesSpec(k *KubernetesSpec, agentConfig *AgentConfig) []string { var errs []string - // GitRepository is required (validated by CRD, but double-check) - if k.GitRepository == "" { - errs = append(errs, "spec.kubernetes.gitRepository: is required") - } + if k.SkipGitInit { + if k.WorkspacePath == "" { + errs = append(errs, "spec.kubernetes.workspacePath: is required when skipGitInit is true") + } else if containsPathTraversal(k.WorkspacePath) { + errs = append(errs, "spec.kubernetes.workspacePath: must not contain path traversal sequences") + } else if !strings.HasPrefix(k.WorkspacePath, "/") { + errs = append(errs, "spec.kubernetes.workspacePath: must be an absolute path") + } + } else { + // GitRepository is required unless skipGitInit + if k.GitRepository == "" { + errs = append(errs, "spec.kubernetes.gitRepository: is required") + } + + // Reject path traversal in GitRepository + if k.GitRepository != "" && containsPathTraversal(k.GitRepository) { + errs = append(errs, "spec.kubernetes.gitRepository: must not contain path traversal sequences") + } - // Reject path traversal in GitRepository - if k.GitRepository != "" && containsPathTraversal(k.GitRepository) { - errs = append(errs, "spec.kubernetes.gitRepository: must not contain path traversal sequences") + // GitSecretRef is required unless skipGitInit + if k.GitSecretRef.Name == "" { + errs = append(errs, "spec.kubernetes.gitSecretRef.name: is required") + } } // Reject path traversal in GitBranch @@ -181,16 +196,15 @@ func validateKubernetesSpec(k *KubernetesSpec) []string { errs = append(errs, "spec.kubernetes.gitBranch: must not contain path traversal sequences") } - // GitSecretRef is required - if k.GitSecretRef.Name == "" { - errs = append(errs, "spec.kubernetes.gitSecretRef.name: is required") - } - - // Either ClaudeCredsSecretRef or ApiKeySecretRef is required for authentication + // Auth: OAuth creds, direct API key, or LiteLLM/gateway key via agentConfig hasOAuth := k.ClaudeCredsSecretRef != nil && k.ClaudeCredsSecretRef.Name != "" hasAPIKey := k.ApiKeySecretRef != nil && k.ApiKeySecretRef.Name != "" - if !hasOAuth && !hasAPIKey { - errs = append(errs, "spec.kubernetes: either claudeCredsSecretRef or apiKeySecretRef is required") + hasGateway := agentConfig != nil && + agentConfig.ModelProvider != nil && + agentConfig.ModelProvider.APIKeySecretRef != nil && + agentConfig.ModelProvider.APIKeySecretRef.Name != "" + if !hasOAuth && !hasAPIKey && !hasGateway { + errs = append(errs, "spec.kubernetes: either claudeCredsSecretRef, apiKeySecretRef, or agentConfig.modelProvider.apiKeySecretRef is required") } // Validate ActiveDeadlineSeconds @@ -210,11 +224,13 @@ func validateKubernetesSpec(k *KubernetesSpec) []string { // validateImageRegistry checks that the image is from an allowed registry. // This prevents attackers from running arbitrary container images in the cluster. +// Local Docker Desktop builds (polecat-agent:local) are allowed in addition to published registries. var allowedRegistries = []string{ "ghcr.io/boshu2/", // Official Gas Town images "docker.io/boshu2/", // Docker Hub official images "registry.access.redhat.com/", // Red Hat UBI images for FIPS "quay.io/boshu2/", // Quay official images + "polecat-agent:", // Local Docker Desktop image (name:tag, no registry) } func validateImageRegistry(image string) error { @@ -344,8 +360,11 @@ func (d *PolecatCustomDefaulter) Default(ctx context.Context, polecat *Polecat) // Set kubernetes defaults if polecat.Spec.ExecutionMode == ExecutionModeKubernetes && polecat.Spec.Kubernetes != nil { - // Set default git branch - if polecat.Spec.Kubernetes.GitBranch == "" { + if polecat.Spec.Kubernetes.SkipGitInit { + if polecat.Spec.Kubernetes.WorkspacePath == "" { + polecat.Spec.Kubernetes.WorkspacePath = "/workspace/promo-tool" + } + } else if polecat.Spec.Kubernetes.GitBranch == "" { polecat.Spec.Kubernetes.GitBranch = "main" } diff --git a/api/v1alpha1/polecat_webhook_test.go b/api/v1alpha1/polecat_webhook_test.go index 5548988..718368f 100644 --- a/api/v1alpha1/polecat_webhook_test.go +++ b/api/v1alpha1/polecat_webhook_test.go @@ -136,7 +136,7 @@ func TestPolecatCustomValidator_ValidateCreate(t *testing.T) { }, }, wantErr: true, - errContains: "spec.kubernetes: either claudeCredsSecretRef or apiKeySecretRef is required", + errContains: "spec.kubernetes: either claudeCredsSecretRef, apiKeySecretRef, or agentConfig.modelProvider.apiKeySecretRef is required", }, { name: "high resource usage warning", @@ -521,6 +521,30 @@ func TestValidateKubernetesSpec(t *testing.T) { }, wantErrs: 0, }, + { + name: "skip git init valid", + spec: &KubernetesSpec{ + SkipGitInit: true, + WorkspacePath: "/workspace/promo-tool", + ApiKeySecretRef: &SecretKeyRef{ + Name: "litellm-auth", + Key: "master-key", + }, + }, + wantErrs: 0, + }, + { + name: "skip git init missing workspace path", + spec: &KubernetesSpec{ + SkipGitInit: true, + ApiKeySecretRef: &SecretKeyRef{ + Name: "litellm-auth", + Key: "master-key", + }, + }, + wantErrs: 1, + errContains: []string{"spec.kubernetes.workspacePath: is required when skipGitInit is true"}, + }, { name: "missing git repository", spec: &KubernetesSpec{ @@ -537,7 +561,7 @@ func TestValidateKubernetesSpec(t *testing.T) { errContains: []string{ "spec.kubernetes.gitRepository: is required", "spec.kubernetes.gitSecretRef.name: is required", - "spec.kubernetes: either claudeCredsSecretRef or apiKeySecretRef is required", + "spec.kubernetes: either claudeCredsSecretRef, apiKeySecretRef, or agentConfig.modelProvider.apiKeySecretRef is required", }, }, { @@ -586,7 +610,7 @@ func TestValidateKubernetesSpec(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - errs := validateKubernetesSpec(tt.spec) + errs := validateKubernetesSpec(tt.spec, nil) assert.Len(t, errs, tt.wantErrs) for _, expected := range tt.errContains { found := false diff --git a/bte-promo-script/.env.example b/bte-promo-script/.env.example new file mode 100644 index 0000000..21b6a13 --- /dev/null +++ b/bte-promo-script/.env.example @@ -0,0 +1,12 @@ +# Local reference — copy values as needed. Not read by pods at runtime. +# +# Secrets → secrets.env + deploy/apply-secrets.sh (K8s secretKeyRef) +# MADEYE_BASE_URL → madeye-proxy Deployment env (see deploy/madeye-proxy.yaml) + +# --- K8s secrets (apply-secrets.sh) --- +GENAXIS_API_KEY=replace-with-genaxis-api-key +MADEYE_API_KEY=replace-with-madeye-bearer-token + +# --- madeye-proxy pod env (K8s Deployment, not defaults.go) --- +# Host only — proxy appends /v1/chat/completions +MADEYE_BASE_URL=https://madeye-dev.internal.pocketfm.org diff --git a/bte-promo-script/INFRA-README.md b/bte-promo-script/INFRA-README.md new file mode 100644 index 0000000..024616f --- /dev/null +++ b/bte-promo-script/INFRA-README.md @@ -0,0 +1,237 @@ +# BTE Promo Script — Infrastructure & Flow + +How a GenAxis request becomes a promo script: who calls whom and where data moves. + +--- + +## Flow + +``` +GenAxis + │ POST /v1/promo/generate + ▼ +promo-api (:8080, NodePort 30080) + │ creates Polecat CR + │ webhook → GenAxis PROMO_SCRIPT_STARTED + ▼ +gastown-operator → polecat pod + │ + ├─ workspace-init copies promo tool → /workspace/promo-tool + │ + └─ claude (Claude Code) + ├─ LLM → madeye-proxy (:4000) → MadEye + └─ invokes promo-finish finish … + ▼ + promo-finish (orchestrator — Claude only runs this) + │ POST promo-api …/upload (stub S3) + │ POST promo-api …/webhook + ▼ + promo-api → GenAxis PROMO_SCRIPT_COMPLETED +``` + +--- + +## Services + +| Service | Cluster | Docker Desktop | Caller | +|---------|---------|----------------|--------| +| promo-api | `:8080` | `localhost:30080` | GenAxis, promo-finish | +| madeye-proxy | `:4000` | `localhost:30040` | Claude Code | +| MadEye | external | `madeye-dev.internal.pocketfm.org` (+ `/v1` in code) | madeye-proxy only | + +--- + +## MadEye proxy (our code — no LiteLLM) + +Claude Code speaks **Anthropic API**. MadEye speaks **OpenAI API**. +**`bte-promo-script/madeye-proxy/`** is a small Go service we own that: + +1. Accepts `POST /v1/messages` (Anthropic format) +2. Strips trailing assistant prefills (MadEye rejects them) +3. Converts request → OpenAI `chat/completions` +4. Calls MadEye with `MADEYE_API_KEY` +5. Converts response back → Anthropic format (including streaming) + +``` +Claude Code ──Anthropic──► madeye-proxy ──OpenAI──► MadEye + PROXY_MASTER_KEY MADEYE_API_KEY +``` + +Polecat env (set by promo-api): `ANTHROPIC_BASE_URL=http://madeye-proxy.gastown-system.svc:4000`, `ANTHROPIC_AUTH_TOKEN` from `api/defaults.go` (`DefaultProxyMasterKey`). + +**Two different keys on the LLM path:** + +| Key | Who sends it | Who checks it | Real purpose | +|-----|--------------|---------------|--------------| +| `PROXY_MASTER_KEY` | Claude Code as `ANTHROPIC_AUTH_TOKEN` (Bearer) | madeye-proxy | **Gate** — only our polecats may call the proxy | +| `MADEYE_API_KEY` | madeye-proxy as `Authorization: Bearer` | MadEye | **Upstream** — actual LLM billing/access | + +`PROXY_MASTER_KEY` is **not** a real Anthropic key and **not** the MadEye key. Claude Code always sends an API key header; we reuse that slot for our proxy password. `PROXY_MASTER_KEY` and `MADEYE_USER_EMAIL` live in `api/defaults.go` and are applied to the madeye-proxy deployment by `deploy-infra.sh` — not stored in K8s secrets. + +--- + +## Who calls what + +| Step | Caller | Callee | +|------|--------|--------| +| Start job | GenAxis | promo-api | +| LLM | Claude Code | madeye-proxy → MadEye | +| Finish | Claude | `promo-finish finish …` | +| Upload + webhook | **promo-finish** | promo-api | +| Done | promo-api | GenAxis | + +Claude never calls GenAxis, S3, or MadEye directly. + +--- + +## Secrets (K8s-injected) + +Only **real upstream keys** live in Kubernetes secrets. Pods receive them via `secretKeyRef` — not from `.env` at runtime. + +| Secret | Key | Env in pod | Used by | +|--------|-----|------------|---------| +| `madeye-proxy-secrets` | `MADEYE_API_KEY` | `MADEYE_API_KEY` | madeye-proxy → MadEye | +| `genaxis-auth` | `api-key` | `GENAXIS_API_KEY` | promo-api → GenAxis webhooks | + +**Non-secret config** (`PROXY_MASTER_KEY`, `MADEYE_USER_EMAIL`, in-cluster proxy URL, rig name, etc.) lives in `api/defaults.go`. `deploy-infra.sh` sets `PROXY_MASTER_KEY` and `MADEYE_USER_EMAIL` on the madeye-proxy deployment; promo-api sets polecat `ANTHROPIC_AUTH_TOKEN` from the same defaults. + +**K8s env (not secrets, not `defaults.go`):** `MADEYE_BASE_URL` on the madeye-proxy pod — upstream MadEye **host only** (e.g. `https://madeye-dev.internal.pocketfm.org`). Same name as GenAxis. The proxy appends `/v1/chat/completions` in code. Set in `deploy/madeye-proxy.yaml` (local) or infra manifest (prod). + +**One-time setup (local or CI → Vault):** + +```bash +cp bte-promo-script/secrets.env.example bte-promo-script/secrets.env +# edit GENAXIS_API_KEY and MADEYE_API_KEY only +./bte-promo-script/deploy/apply-secrets.sh +``` + +--- + +## Deploy + +```bash +./bte-promo-script/deploy/apply-secrets.sh # once — K8s secrets +./bte-promo-script/deploy/deploy-infra.sh # operator + madeye-proxy + Rig +./bte-promo-script/deploy/deploy-promo.sh # promo-api + polecat-agent +``` + +| Script | Builds | +|--------|--------| +| `deploy-infra.sh` | gastown-operator, **madeye-proxy**, Rig | +| `deploy-promo.sh` | polecat-agent, promo-api | + +--- + +## Code locations + +| Piece | Path | +|-------|------| +| MadEye proxy | `bte-promo-script/madeye-proxy/` | +| promo-api | `bte-promo-script/api/` | +| promo-finish | `bte-promo-script/tools/finish/` | +| Promo tool | `bte-promo-script/repos/bte-promo-script-repo/` | + +S3 upload is still a stub (`api/s3.go`). Job outputs stay in the pod unless copied out. + +--- + +## Infra changes required (cloud K8s) + +Local scripts target **Docker Desktop** (local `docker build`, `*:local` images, NodePort). Architecture is cloud-ready; **values and CI** need infra updates before production. + +### Who owns what + +| Pipeline | Script | Infra | App team | +|----------|--------|-------|----------| +| Base platform | `deploy-infra.sh` | Yes | — | +| Promo app | `deploy-promo.sh` | Secrets + network | Builds & pushes images | + +### Secrets (create in K8s — not from `.env` in prod) + +| Secret | Keys | Used by | +|--------|------|---------| +| `madeye-proxy-secrets` | `MADEYE_API_KEY` | madeye-proxy pod → MadEye | +| `genaxis-auth` | `api-key` | promo-api → GenAxis webhooks | + +`PROXY_MASTER_KEY`, `MADEYE_USER_EMAIL`, and polecat `ANTHROPIC_AUTH_TOKEN` come from `api/defaults.go` (applied at deploy time, not K8s secrets). + +### Files infra adapts + +**`deploy/deploy-infra.sh`** + +| Today (local) | Cloud change | +|---------------|--------------| +| `KUBE_CONTEXT=docker-desktop` | Set to prod cluster context | +| `make docker-build-e2e` (local image) | CI builds + pushes operator to registry | +| `imagePullPolicy: Never` patch on operator | Remove; use registry URL + `Always` | +| `docker build madeye-proxy` → `madeye-proxy:local` | CI push → `registry/madeye-proxy:tag` | +| Secrets from `bte-promo-script/secrets.env` via `apply-secrets.sh` | Vault → K8s secrets | + +**`deploy/deploy-promo.sh`** (app CI runs build; infra provides cluster + secrets) + +| Today (local) | Cloud change | +|---------------|--------------| +| `kubectl config use-context docker-desktop` | Prod context | +| `docker build` → `promo-api:local`, `polecat-agent:local` | CI push full registry URLs | +| `AGENT_IMAGE=polecat-agent:tag` | Must be registry URL (worker nodes pull on each job) | +| `genaxis-auth` from `apply-secrets.sh` | Vault → K8s secret | + +**`deploy/madeye-proxy.yaml`** + +| Field | Local | Cloud | +|-------|-------|-------| +| `image` | `madeye-proxy:local` | Registry URL + tag | +| `imagePullPolicy` | `IfNotPresent` | `Always` (typical) | +| `MADEYE_BASE_URL` | `https://madeye-dev.internal.pocketfm.org` (host only; `/v1` in app) | Confirm prod host + network egress | +| Service | `NodePort` 30040 | `ClusterIP` (internal only) | + +**`deploy/bte-promo-script.yaml`** + +| Field | Local | Cloud | +|-------|-------|-------| +| `image` | `promo-api:local` | Registry URL + tag | +| `AGENT_IMAGE` | `polecat-agent:local` | Registry URL + tag | +| Service | `NodePort` 30080 | Ingress or internal LB for GenAxis | +| Namespace | `gastown-system` | Same or infra standard | + +**Operator** (repo root, not under `bte-promo-script/`) + +| Step | Cloud change | +|------|--------------| +| `make install` | Install CRDs once per cluster | +| `make deploy IMG=...` | `IMG` = registry operator image | +| Namespace | `gastown-operator-system` | + +**`deploy/rig.yaml.tpl`** — infra may tune `maxPolecats`; rig name/URL usually from `api/defaults.go` (app). + +### Network (no code change) + +| URL | Caller | Notes | +|-----|--------|-------| +| `http://promo-api.gastown-system.svc:8080` | promo-finish | In-cluster only | +| `http://madeye-proxy.gastown-system.svc:4000` | Claude Code | In-cluster only | +| GenAxis → promo-api | External | Infra exposes via Ingress/LB | +| madeye-proxy → MadEye | Egress | Cluster must reach MadEye host | + +### Infra checklist + +``` +□ Namespaces: gastown-operator-system, gastown-system +□ Image registry + imagePullSecrets (if private) +□ CI: push gastown-operator, madeye-proxy, promo-api, polecat-agent +□ K8s secrets: madeye-proxy-secrets, genaxis-auth +□ CRDs + operator deploy +□ madeye-proxy.yaml (registry image, ClusterIP) +□ rig.yaml.tpl +□ bte-promo-script.yaml (registry images, GenAxis Ingress) +□ Smoke: GenAxis → promo-api → polecat → madeye-proxy → MadEye +``` + +### What infra does not change + +| Path | Owner | +|------|-------| +| `tools/finish/`, `repos/bte-promo-script-repo/` | App (baked into polecat-agent) | +| `api/`, `madeye-proxy/` Go code | App | +| Dockerfiles | App builds; infra only needs pull access | +| Operator Go code (`internal/`, `pkg/`) | App release | diff --git a/bte-promo-script/README.md b/bte-promo-script/README.md new file mode 100644 index 0000000..c476a0a --- /dev/null +++ b/bte-promo-script/README.md @@ -0,0 +1,95 @@ +# BTE Promo Script + +PocketFM BTE promo pipeline — API, finish tool, deploy manifests, and config. + +**Infrastructure & flow:** [INFRA-README.md](INFRA-README.md) + +## Layout + +``` +bte-promo-script/ + secrets.env.example template for K8s secrets (apply once) + secrets.env gitignored — GENAXIS + MADEYE keys + api/ promo-api HTTP service + madeye-proxy/ Anthropic → OpenAI proxy to MadEye + tools/ + finish/ promo-finish CLI (runs on Polecat) + repos/ + bte-promo-script-repo/ promo pipeline tool (workflows, canon, PROMO_FINISH) + deploy/ + bte-promo-script.yaml K8s Deployment + Service + RBAC + madeye-proxy.yaml madeye-proxy Deployment + Service + rig.yaml.tpl Rig CR template + apply-secrets.sh K8s secrets from secrets.env (run once) + deploy-infra.sh operator + madeye-proxy + Rig (run once) + deploy-promo.sh promo-api + polecat-agent images + README.md +``` + +## Flow + +1. GenAxis → `POST /v1/promo/generate` → Polecat + `PROMO_SCRIPT_STARTED` +2. Polecat uses a **static pipeline** at `/workspace/promo-tool` (baked into `polecat-agent`, no git clone); Claude runs W2→W3→W4 +3. `promo-finish finish map=… briefs=… script=… receipt=…` → `PROMO_SCRIPT_COMPLETED` + +Finish instructions: `repos/bte-promo-script-repo/scripts/PROMO_FINISH.md` + +## Config + +| Type | Location | +|------|----------| +| Infra secrets | K8s secrets (`genaxis-auth`, `madeye-proxy-secrets`) via `apply-secrets.sh` | +| Non-secret constants | `api/defaults.go` (rig, proxy URL, MadEye email, proxy key) | + +**K8s secrets (injected into pods via `secretKeyRef`):** + +| Secret | Key | Pod env | Purpose | +|--------|-----|---------|---------| +| `genaxis-auth` | `api-key` | `GENAXIS_API_KEY` | promo-api → GenAxis | +| `madeye-proxy-secrets` | `MADEYE_API_KEY` | `MADEYE_API_KEY` | madeye-proxy → MadEye | + +**`defaults.go` constants (committed, not in `.env`):** + +| Constant | Purpose | +|----------|---------| +| `DefaultMadEyeUserEmail` | MadEye metadata | +| `DefaultProxyMasterKey` | Polecats → madeye-proxy auth | +| `DefaultMadEyeProxyURL` | In-cluster proxy URL | + +| Constant | Default | +|----------|---------| +| GenAxis webhook | `https://gen-axis.pocketfm.com/v1/bte/internal/webhook` | +| Promo workspace | `/workspace/promo-tool` (copied from image at pod start) | +| Rig | `promo-script-tool` | + +Upload/S3: stub — logs paths, returns hardcoded URLs until real S3 (`api/s3.go`). + +## Deploy + +```bash +cp bte-promo-script/secrets.env.example bte-promo-script/secrets.env +# edit GENAXIS_API_KEY and MADEYE_API_KEY + +./bte-promo-script/deploy/apply-secrets.sh # once → K8s secrets +./bte-promo-script/deploy/deploy-infra.sh # operator + madeye-proxy + Rig +./bte-promo-script/deploy/deploy-promo.sh # promo-api + polecat-agent +kubectl -n gastown-system port-forward svc/promo-api 30080:8080 +``` + +**Infra production:** + +1. Build/push `promo-api` and `polecat-agent` images (`promo-finish` + pipeline repo must be in agent) +2. Create K8s secrets (`genaxis-auth`, `madeye-proxy-secrets`) via Vault/CI or `apply-secrets.sh` — only `MADEYE_API_KEY` and `GENAXIS_API_KEY`; proxy master key and email come from `api/defaults.go` +3. Apply `deploy/bte-promo-script.yaml` (set image tags) +4. Apply Rig from `deploy/rig.yaml.tpl` +5. Smoke: `POST /v1/promo/generate` → STARTED → Claude → `promo-finish` → COMPLETED + +## Endpoints + +| Method | Path | Purpose | +|--------|------|---------| +| `POST` | `/v1/promo/generate` | Start job | +| `GET` | `/v1/promo/jobs/{name}` | Job status | +| `POST` | `/v1/promo/jobs/{name}/upload` | Upload files → `artifacts[]` | +| `POST` | `/v1/promo/jobs/{name}/webhook` | GenAxis completed webhook | +| `POST` | `/v1/promo/jobs/{name}/complete` | Upload + webhook | diff --git a/bte-promo-script/api/Dockerfile b/bte-promo-script/api/Dockerfile new file mode 100644 index 0000000..529ab81 --- /dev/null +++ b/bte-promo-script/api/Dockerfile @@ -0,0 +1,14 @@ +# Promo API - thin HTTP front door for BTE promo script jobs +FROM golang:1.25-alpine AS builder +WORKDIR /src +RUN apk add --no-cache git ca-certificates +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/promo-api ./bte-promo-script/api + +FROM gcr.io/distroless/static:nonroot +COPY --from=builder /out/promo-api /promo-api +USER 65532:65532 +EXPOSE 8080 +ENTRYPOINT ["/promo-api"] diff --git a/bte-promo-script/api/defaults.go b/bte-promo-script/api/defaults.go new file mode 100644 index 0000000..4dd4e2a --- /dev/null +++ b/bte-promo-script/api/defaults.go @@ -0,0 +1,46 @@ +package main + +import "strings" + +// Non-secret promo-api constants. Override via env in production manifests. +const ( + DefaultNamespace = "bte-gastown" + + DefaultRigName = "promo-script-tool" + // Rig metadata only — Polecats use skipGitInit and do not clone a git repo. + DefaultRigGitURL = "file:///promo-tool" + // Static promo pipeline workspace inside the polecat-agent image (writable copy on emptyDir). + DefaultPromoWorkspacePath = "/workspace/promo-tool" + + DefaultGenAxisURL = "https://gen-axis.pocketfm.com" + GenAxisWebhookPath = "/v1/bte/internal/webhook" + + // In-cluster service DNS (Pod 2 → Pod 1). + DefaultPromoAPIURL = "http://promo-api.bte-gastown.svc:8080" + DefaultMadEyeProxyURL = "http://madeye-proxy.bte-gastown.svc:4000" + DefaultMadEyeProxyAuthSecret = "madeye-proxy-auth" + DefaultMadEyeProxyAuthKey = "master-key" + + // GenAxis webhook event types (body.type). + GenAxisTypePromoStarted = "PROMO_SCRIPT_STARTED" + GenAxisTypePromoCompleted = "PROMO_SCRIPT_COMPLETED" + + annotationRequestID = "gastown.io/request-id" + + // Dev-only: hostPath for local W4 export. Empty disables mount in polecat pods. + DefaultDevOutputHostPath = "" + DefaultDevOutputMountPath = "/workspace/dev-output" + DefaultDevSaveURL = "" // local: http://host.docker.internal:3099/dev-save + AnnotationDevOutputHost = "gastown.io/dev-output-host" + + // S3 not wired yet — upload handler logs paths and returns stub URLs. + StubFileURLBase = "https://promo-stub.pocketfm.test/files" + + // Local dev only (deploy-infra.sh / apply-secrets.sh). Prod uses ExternalSecret + madeye-proxy-auth. + DefaultMadEyeUserEmail = "promo@pocketfm.com" + DefaultProxyMasterKey = "sk-local-madeye-proxy" +) + +func genAxisWebhookURL() string { + return strings.TrimRight(DefaultGenAxisURL, "/") + GenAxisWebhookPath +} diff --git a/bte-promo-script/api/dev_save.go b/bte-promo-script/api/dev_save.go new file mode 100644 index 0000000..d29b129 --- /dev/null +++ b/bte-promo-script/api/dev_save.go @@ -0,0 +1,81 @@ +package main + +import ( + "bytes" + "encoding/json" + "log" + "net/http" + "os" + "path/filepath" + "strings" + "time" +) + +type devSaveRequest struct { + JobName string `json:"job_name"` + Filename string `json:"filename"` + Content string `json:"content"` +} + +// saveDevScript POSTs the W4 script body to a host listener (Docker Desktop Mac). +// LOCAL TEST ONLY — hostPath mounts do not sync writes back to macOS from K8s pods. +func saveDevScript(jobName string, files []filePayload) { + if DefaultDevOutputHostPath == "" { + return + } + url := strings.TrimSpace(os.Getenv("PROMO_DEV_SAVE_URL")) + if url == "" { + url = DefaultDevSaveURL + } + if url == "" { + return + } + + var scriptPath, scriptBody string + for _, f := range files { + if f.Key == "script" && strings.TrimSpace(f.Script) != "" { + scriptPath = f.FilePath + scriptBody = f.Script + break + } + } + if scriptBody == "" { + log.Printf("dev-save: skip job=%q (no script content in upload)", jobName) + return + } + + filename := filepath.Base(scriptPath) + if filename == "" || filename == "." { + filename = jobName + "-script.md" + } + + body, err := json.Marshal(devSaveRequest{ + JobName: jobName, + Filename: filename, + Content: scriptBody, + }) + if err != nil { + log.Printf("dev-save: WARN marshal: %v", err) + return + } + + req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body)) + if err != nil { + log.Printf("dev-save: WARN request: %v", err) + return + } + req.Header.Set("Content-Type", "application/json") + + client := &http.Client{Timeout: 10 * time.Second} + resp, err := client.Do(req) + if err != nil { + log.Printf("dev-save: WARN POST %s failed: %v (is the host catcher running?)", url, err) + return + } + defer resp.Body.Close() + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + log.Printf("dev-save: WARN POST %s returned HTTP %d", url, resp.StatusCode) + return + } + log.Printf("dev-save: W4 script sent to host => %s (%s)", url, filename) +} diff --git a/bte-promo-script/api/handlers_handoff.go b/bte-promo-script/api/handlers_handoff.go new file mode 100644 index 0000000..f7b857c --- /dev/null +++ b/bte-promo-script/api/handlers_handoff.go @@ -0,0 +1,268 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "log" + "net/http" + "strings" + "time" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + + gastownv1alpha1 "github.com/org/gastown-operator/api/v1alpha1" +) + +type handoffBody struct { + RequestID string `json:"request_id"` + FilePath string `json:"file_path,omitempty"` + Script string `json:"script,omitempty"` + Files []filePayload `json:"files,omitempty"` +} + +type uploadResponse struct { + JobName string `json:"job_name"` + RequestID string `json:"request_id"` + Artifacts []artifact `json:"artifacts"` +} + +type webhookHandoffBody struct { + RequestID string `json:"request_id"` + Artifacts []artifact `json:"artifacts"` +} + +type webhookResponse struct { + JobName string `json:"job_name"` + RequestID string `json:"request_id"` + Message string `json:"message"` +} + +func handleJobUpload(cfg config, k8s client.Client) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + name := r.PathValue("name") + if name == "" { + writeErr(w, http.StatusBadRequest, "job name required") + return + } + + var req handoffBody + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeErr(w, http.StatusBadRequest, "invalid JSON body") + return + } + + files, err := normalizeFiles(req) + if err != nil { + writeErr(w, http.StatusBadRequest, err.Error()) + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) + defer cancel() + + _, requestID, err := loadJobRequestID(ctx, k8s, cfg.Namespace, name, req.RequestID) + if err != nil { + writeHandoffErr(w, err) + return + } + + log.Printf("upload received: job_name=%q request_id=%q files=%d", name, requestID, len(files)) + for _, f := range files { + log.Printf(" upload input: key=%q path=%q", f.Key, f.FilePath) + } + + artifacts, err := uploadPromoArtifacts(name, requestID, files) + if err != nil { + writeErr(w, http.StatusBadRequest, err.Error()) + return + } + + go saveDevScript(name, files) + + writeJSON(w, http.StatusOK, uploadResponse{ + JobName: name, + RequestID: requestID, + Artifacts: artifacts, + }) + } +} + +func handleJobWebhook(cfg config, k8s client.Client) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + name := r.PathValue("name") + if name == "" { + writeErr(w, http.StatusBadRequest, "job name required") + return + } + + var req webhookHandoffBody + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeErr(w, http.StatusBadRequest, "invalid JSON body") + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) + defer cancel() + + _, requestID, err := loadJobRequestID(ctx, k8s, cfg.Namespace, name, req.RequestID) + if err != nil { + writeHandoffErr(w, err) + return + } + + if err := validateArtifacts(req.Artifacts); err != nil { + writeErr(w, http.StatusBadRequest, err.Error()) + return + } + + log.Printf("handoff: [promo-finish→promo-api] POST /v1/promo/jobs/%s/webhook job=%q request_id=%q artifacts=%d", + name, name, requestID, len(req.Artifacts)) + for _, a := range req.Artifacts { + log.Printf(" handoff artifact: key=%q path=%q file_url=%q s3_key=%q", a.Key, a.FilePath, a.FileURL, a.S3Key) + } + + result := map[string]any{ + "job_name": name, + "status": "completed", + "artifacts": req.Artifacts, + "files": artifactsByKey(req.Artifacts), + "rig": cfg.RigName, + } + log.Printf("handoff: firing GenAxis webhook type=%s request_id=%q (triggered by promo-finish)", GenAxisTypePromoCompleted, requestID) + postGenAxisWebhook(cfg, GenAxisTypePromoCompleted, requestID, result, "") + + writeJSON(w, http.StatusOK, webhookResponse{ + JobName: name, + RequestID: requestID, + Message: "genaxis completed webhook sent", + }) + } +} + +// handleJobComplete runs upload + webhook in one call (testing / convenience). +func handleJobComplete(cfg config, k8s client.Client) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + name := r.PathValue("name") + if name == "" { + writeErr(w, http.StatusBadRequest, "job name required") + return + } + + var req handoffBody + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeErr(w, http.StatusBadRequest, "invalid JSON body") + return + } + + files, err := normalizeFiles(req) + if err != nil { + writeErr(w, http.StatusBadRequest, err.Error()) + return + } + + ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) + defer cancel() + + _, requestID, err := loadJobRequestID(ctx, k8s, cfg.Namespace, name, req.RequestID) + if err != nil { + writeHandoffErr(w, err) + return + } + + artifacts, err := uploadPromoArtifacts(name, requestID, files) + if err != nil { + writeErr(w, http.StatusBadRequest, err.Error()) + return + } + + go saveDevScript(name, files) + + postGenAxisWebhook(cfg, GenAxisTypePromoCompleted, requestID, map[string]any{ + "job_name": name, + "status": "completed", + "artifacts": artifacts, + "files": artifactsByKey(artifacts), + "rig": cfg.RigName, + }, "") + + writeJSON(w, http.StatusOK, uploadResponse{ + JobName: name, + RequestID: requestID, + Artifacts: artifacts, + }) + } +} + +func normalizeFiles(req handoffBody) ([]filePayload, error) { + if len(req.Files) > 0 { + for i, f := range req.Files { + if strings.TrimSpace(f.Key) == "" { + return nil, fmt.Errorf("files[%d].key is required", i) + } + if strings.TrimSpace(f.FilePath) == "" { + return nil, fmt.Errorf("files[%d].file_path is required", i) + } + } + return req.Files, nil + } + if strings.TrimSpace(req.FilePath) != "" { + return []filePayload{{Key: "script", FilePath: req.FilePath}}, nil + } + return nil, fmt.Errorf("files array with key+file_path is required") +} + +func validateArtifacts(artifacts []artifact) error { + if len(artifacts) == 0 { + return fmt.Errorf("artifacts array is required (from upload step)") + } + for i, a := range artifacts { + if a.Key == "" { + return fmt.Errorf("artifact[%d] must include key", i) + } + if a.FileURL == "" || a.S3Key == "" { + return fmt.Errorf("artifact[%d] must include file_url and s3_key", i) + } + } + return nil +} + +func loadJobRequestID(ctx context.Context, k8s client.Client, namespace, name, reqID string) (*gastownv1alpha1.Polecat, string, error) { + var polecat gastownv1alpha1.Polecat + if err := k8s.Get(ctx, types.NamespacedName{Namespace: namespace, Name: name}, &polecat); err != nil { + if apierrors.IsNotFound(err) { + return nil, "", handoffError{code: http.StatusNotFound, msg: "job not found"} + } + return nil, "", handoffError{code: http.StatusInternalServerError, msg: err.Error()} + } + + requestID := strings.TrimSpace(reqID) + if requestID == "" { + requestID = polecat.Annotations[annotationRequestID] + } + if requestID == "" { + return nil, "", handoffError{code: http.StatusBadRequest, msg: "request_id is required"} + } + if expected := polecat.Annotations[annotationRequestID]; expected != "" && requestID != expected { + return nil, "", handoffError{code: http.StatusBadRequest, msg: "request_id does not match job"} + } + + return &polecat, requestID, nil +} + +type handoffError struct { + code int + msg string +} + +func (e handoffError) Error() string { return e.msg } + +func writeHandoffErr(w http.ResponseWriter, err error) { + if he, ok := err.(handoffError); ok { + writeErr(w, he.code, he.msg) + return + } + writeErr(w, http.StatusInternalServerError, err.Error()) +} diff --git a/bte-promo-script/api/kubeconfig.go b/bte-promo-script/api/kubeconfig.go new file mode 100644 index 0000000..7b15144 --- /dev/null +++ b/bte-promo-script/api/kubeconfig.go @@ -0,0 +1,19 @@ +package main + +import ( + "os" + + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" +) + +func restConfigFromKubeconfig() (*rest.Config, error) { + loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() + if kc := os.Getenv("KUBECONFIG"); kc != "" { + loadingRules.ExplicitPath = kc + } + return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( + loadingRules, + &clientcmd.ConfigOverrides{}, + ).ClientConfig() +} diff --git a/bte-promo-script/api/main.go b/bte-promo-script/api/main.go new file mode 100644 index 0000000..638c96c --- /dev/null +++ b/bte-promo-script/api/main.go @@ -0,0 +1,522 @@ +package main + +import ( + "context" + "crypto/rand" + "encoding/hex" + "encoding/json" + "fmt" + "log" + "net/http" + "os" + "os/signal" + "strings" + "syscall" + "time" + + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + clientgoscheme "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + + gastownv1alpha1 "github.com/org/gastown-operator/api/v1alpha1" +) + +func main() { + cfg := loadConfig() + scheme := runtime.NewScheme() + utilruntime.Must(clientgoscheme.AddToScheme(scheme)) + utilruntime.Must(gastownv1alpha1.AddToScheme(scheme)) + + restCfg, err := rest.InClusterConfig() + if err != nil { + // Local/dev fallback (Docker Desktop kubectl proxy / kubeconfig) + restCfg, err = restConfigFromKubeconfig() + if err != nil { + log.Fatalf("kubernetes config: %v", err) + } + } + + k8s, err := client.New(restCfg, client.Options{Scheme: scheme}) + if err != nil { + log.Fatalf("kubernetes client: %v", err) + } + + srv := &http.Server{ + Addr: fmt.Sprintf(":%d", cfg.Port), + Handler: newRouter(cfg, k8s), + ReadHeaderTimeout: 10 * time.Second, + } + + go func() { + log.Printf("promo-api listening on :%d (namespace=%s rig=%s webhook=%s)", + cfg.Port, cfg.Namespace, cfg.RigName, cfg.WebhookURL) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Fatalf("listen: %v", err) + } + }() + + stop := make(chan os.Signal, 1) + signal.Notify(stop, syscall.SIGINT, syscall.SIGTERM) + <-stop + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + _ = srv.Shutdown(ctx) +} + +type config struct { + Port int + Namespace string + RigName string + MadEyeProxyURL string + PolecatMadEyeProxyURL string + AgentImage string + WebhookURL string + GenAxisAPIKey string + PromoAPIURL string +} + +func loadConfig() config { + return config{ + Port: envInt("PORT", 8080), + Namespace: envOr("NAMESPACE", DefaultNamespace), + RigName: DefaultRigName, + MadEyeProxyURL: envOr("MADEYE_PROXY_URL", DefaultMadEyeProxyURL), + PolecatMadEyeProxyURL: envOr("POLECAT_MADEYE_PROXY_URL", DefaultMadEyeProxyURL), + AgentImage: envOr("AGENT_IMAGE", ""), + WebhookURL: envOr("GENAXIS_WEBHOOK_URL", genAxisWebhookURL()), + GenAxisAPIKey: os.Getenv("GENAXIS_API_KEY"), + PromoAPIURL: strings.TrimRight(envOr("PROMO_API_URL", DefaultPromoAPIURL), "/"), + } +} + +func envOr(k, def string) string { + if v := os.Getenv(k); v != "" { + return v + } + return def +} + +func envInt(k string, def int) int { + v := os.Getenv(k) + if v == "" { + return def + } + var n int + if _, err := fmt.Sscanf(v, "%d", &n); err != nil { + return def + } + return n +} + +type secretCheck struct { + name string + key string +} + +func requiredSecrets(namespace string) []secretCheck { + if namespace == DefaultNamespace { + return []secretCheck{ + {name: "bte-gastown-external-secret", key: "GENAXIS_API_KEY"}, + {name: DefaultMadEyeProxyAuthSecret, key: DefaultMadEyeProxyAuthKey}, + } + } + // Local / gastown-system split stack. + return []secretCheck{ + {name: "genaxis-auth", key: "api-key"}, + {name: DefaultMadEyeProxyAuthSecret, key: DefaultMadEyeProxyAuthKey}, + } +} + +func newRouter(cfg config, k8s client.Client) http.Handler { + mux := http.NewServeMux() + mux.HandleFunc("GET /health", handleHealth(cfg, k8s)) + mux.HandleFunc("GET /healthz", handleHealth(cfg, k8s)) + mux.HandleFunc("POST /v1/promo/generate", handleGenerate(cfg, k8s)) + mux.HandleFunc("GET /v1/promo/jobs/{name}", handleJobStatus(cfg, k8s)) + mux.HandleFunc("POST /v1/promo/jobs/{name}/upload", handleJobUpload(cfg, k8s)) + mux.HandleFunc("POST /v1/promo/jobs/{name}/webhook", handleJobWebhook(cfg, k8s)) + mux.HandleFunc("POST /v1/promo/jobs/{name}/complete", handleJobComplete(cfg, k8s)) + return mux +} + +type healthResponse struct { + Status string `json:"status"` + Checks map[string]string `json:"checks"` + Ready bool `json:"ready"` + TimeUTC string `json:"time"` +} + +func handleHealth(cfg config, k8s client.Client) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), 5*time.Second) + defer cancel() + + checks := map[string]string{} + ready := true + + // Kubernetes API + Rig exists + var rig gastownv1alpha1.Rig + if err := k8s.Get(ctx, types.NamespacedName{Name: cfg.RigName, Namespace: cfg.Namespace}, &rig); err != nil { + checks["rig"] = "error: " + err.Error() + ready = false + } else { + checks["rig"] = string(rig.Status.Phase) + if rig.Status.Phase != gastownv1alpha1.RigPhaseReady && rig.Status.Phase != "" { + // Still acceptable if Ready condition is true + for _, c := range rig.Status.Conditions { + if c.Type == "Ready" && c.Status == metav1.ConditionTrue { + checks["rig"] = "Ready" + break + } + } + } + } + + // Required secrets for polecat auth + GenAxis webhooks. + for _, sec := range requiredSecrets(cfg.Namespace) { + var s corev1.Secret + if err := k8s.Get(ctx, types.NamespacedName{Namespace: cfg.Namespace, Name: sec.name}, &s); err != nil { + checks["secret:"+sec.name] = "missing" + ready = false + } else if _, ok := s.Data[sec.key]; !ok { + checks["secret:"+sec.name] = "missing key " + sec.key + ready = false + } else { + checks["secret:"+sec.name] = "ok" + } + } + + // MadEye proxy health + proxyURL := strings.TrimRight(cfg.MadEyeProxyURL, "/") + "/healthz" + req, _ := http.NewRequestWithContext(ctx, http.MethodGet, proxyURL, nil) + resp, err := http.DefaultClient.Do(req) + if err != nil { + checks["madeye-proxy"] = "unreachable: " + err.Error() + ready = false + } else { + _ = resp.Body.Close() + if resp.StatusCode >= 200 && resp.StatusCode < 300 { + checks["madeye-proxy"] = "ok" + } else { + checks["madeye-proxy"] = fmt.Sprintf("http_%d", resp.StatusCode) + ready = false + } + } + + status := "ok" + code := http.StatusOK + if !ready { + status = "degraded" + code = http.StatusServiceUnavailable + } + writeJSON(w, code, healthResponse{ + Status: status, + Checks: checks, + Ready: ready, + TimeUTC: time.Now().UTC().Format(time.RFC3339), + }) + } +} + +type generateRequest struct { + Prompt string `json:"prompt"` + RequestID string `json:"request_id"` + Name string `json:"name,omitempty"` + Branch string `json:"branch,omitempty"` + SourceDocuments []string `json:"source_documents,omitempty"` +} + +type generateResponse struct { + JobName string `json:"job_name"` + RequestID string `json:"request_id"` + Namespace string `json:"namespace"` + Rig string `json:"rig"` + StatusURL string `json:"status_url"` + Message string `json:"message"` +} + +func handleGenerate(cfg config, k8s client.Client) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req generateRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + writeErr(w, http.StatusBadRequest, "invalid JSON body") + return + } + prompt := strings.TrimSpace(req.Prompt) + if prompt == "" { + writeErr(w, http.StatusBadRequest, "prompt is required") + return + } + if len(prompt) > 4000 { + writeErr(w, http.StatusBadRequest, "prompt too long (max 4000 chars)") + return + } + requestID := strings.TrimSpace(req.RequestID) + if requestID == "" { + writeErr(w, http.StatusBadRequest, "request_id is required") + return + } + if len(requestID) > 128 { + writeErr(w, http.StatusBadRequest, "request_id too long (max 128 chars)") + return + } + + name := sanitizeName(req.Name) + if name == "" { + name = "promo-" + shortID() + } + + sourceDocs, err := normalizeSourceDocuments(req.SourceDocuments) + if err != nil { + writeErr(w, http.StatusBadRequest, err.Error()) + return + } + + deadline := int64(3600) + + task := fmt.Sprintf(`You are generating promo scripts. The promo pipeline is at a fixed workspace path (no git clone). + +PIPELINE ROOT (cd here first): +%s + +USER REQUEST: +%s + +JOB NAME: %s +REQUEST ID: %s + +INSTRUCTIONS: +1. Your FIRST action must be a tool call (Read CLAUDE.md at the pipeline root). Do not reply with planning-only text. +2. cd to the pipeline root above and follow CLAUDE.md / workflows (W2→W3→W4). +3. Write outputs under working files/ relative to the pipeline root. +4. Do NOT git add, commit, push, or create a pull request. Leave git untouched. +5. Do NOT call any HTTP API yourself. +6. When W4 is complete, run promo-finish — see scripts/PROMO_FINISH.md in the pipeline root: + + promo-finish finish map= briefs= script= receipt= + + Use paths relative to the pipeline root or absolute paths. Stop when you see PROMO_FINISH_OK on stderr. +%s`, DefaultPromoWorkspacePath, prompt, name, requestID, sourceDocumentsTaskBlock(name, len(sourceDocs))) + + agentEnv := []corev1.EnvVar{ + {Name: "PROMO_API_URL", Value: cfg.PromoAPIURL}, + {Name: "PROMO_JOB_NAME", Value: name}, + {Name: "GENAXIS_REQUEST_ID", Value: requestID}, + {Name: "PROMO_WORKSPACE_PATH", Value: DefaultPromoWorkspacePath}, + } + annotations := map[string]string{ + annotationRequestID: requestID, + } + if len(sourceDocs) > 0 { + raw, err := sourceDocumentsAnnotation(sourceDocs) + if err != nil { + writeErr(w, http.StatusInternalServerError, "source_documents annotation: "+err.Error()) + return + } + annotations[AnnotationSourceDocuments] = raw + } + // LOCAL TEST ONLY — remove before push (see DefaultDevOutputHostPath in defaults.go). + if DefaultDevOutputHostPath != "" { + annotations[AnnotationDevOutputHost] = DefaultDevOutputHostPath + agentEnv = append(agentEnv, corev1.EnvVar{Name: "PROMO_DEV_OUTPUT_DIR", Value: DefaultDevOutputMountPath}) + } + + polecat := &gastownv1alpha1.Polecat{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: cfg.Namespace, + Labels: map[string]string{ + "app.kubernetes.io/name": "promo-api", + "gastown.io/flow": "promo-script", + "gastown.io/rig": cfg.RigName, + "gastown.io/request-id": sanitizeLabel(requestID), + }, + Annotations: annotations, + }, + Spec: gastownv1alpha1.PolecatSpec{ + Rig: cfg.RigName, + DesiredState: gastownv1alpha1.PolecatDesiredWorking, + BeadID: "pst-" + name, + TaskDescription: task, + ExecutionMode: gastownv1alpha1.ExecutionModeKubernetes, + Agent: gastownv1alpha1.AgentTypeClaudeCode, + AgentConfig: &gastownv1alpha1.AgentConfig{ + Provider: gastownv1alpha1.LLMProviderLiteLLM, + Model: "claude-opus-4-8", + ModelProvider: &gastownv1alpha1.ModelProviderConfig{ + Endpoint: cfg.PolecatMadEyeProxyURL, + APIKeySecretRef: &gastownv1alpha1.SecretKeyRef{ + Name: DefaultMadEyeProxyAuthSecret, + Key: DefaultMadEyeProxyAuthKey, + }, + }, + // Force every Claude Code model tier onto MadEye opus-only access. + Env: agentEnv, + }, + Kubernetes: &gastownv1alpha1.KubernetesSpec{ + SkipGitInit: true, + WorkspacePath: DefaultPromoWorkspacePath, + Image: cfg.AgentImage, + ActiveDeadlineSeconds: &deadline, + Resources: &corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("1Gi"), + }, + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("2"), + corev1.ResourceMemory: resource.MustParse("2Gi"), + }, + }, + }, + }, + } + + ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) + defer cancel() + + if err := k8s.Create(ctx, polecat); err != nil { + if apierrors.IsAlreadyExists(err) { + writeErr(w, http.StatusConflict, "job name already exists: "+name) + return + } + writeErr(w, http.StatusInternalServerError, "failed to create polecat: "+err.Error()) + return + } + + // Create can strip skipGitInit/workspacePath (CRD defaulting); merge-patch persists them. + patchData := fmt.Sprintf( + `{"spec":{"kubernetes":{"skipGitInit":true,"workspacePath":%q}}}`, + DefaultPromoWorkspacePath, + ) + if err := k8s.Patch(ctx, polecat, client.RawPatch(types.MergePatchType, []byte(patchData))); err != nil { + log.Printf("warn: polecat %s created but skipGitInit patch failed: %v", name, err) + } + + writeJSON(w, http.StatusAccepted, generateResponse{ + JobName: name, + RequestID: requestID, + Namespace: cfg.Namespace, + Rig: cfg.RigName, + StatusURL: fmt.Sprintf("/v1/promo/jobs/%s", name), + Message: "promo script generation started", + }) + + go postGenAxisWebhook(cfg, GenAxisTypePromoStarted, requestID, map[string]any{ + "job_name": name, + "status": "started", + "prompt": prompt, + "namespace": cfg.Namespace, + "rig": cfg.RigName, + }, "") + } +} + +type jobStatusResponse struct { + Name string `json:"name"` + Namespace string `json:"namespace"` + Phase string `json:"phase"` + PodName string `json:"pod_name,omitempty"` + PodActive bool `json:"pod_active"` + BeadID string `json:"bead_id,omitempty"` + Message string `json:"message,omitempty"` +} + +func handleJobStatus(cfg config, k8s client.Client) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + name := r.PathValue("name") + if name == "" { + writeErr(w, http.StatusBadRequest, "job name required") + return + } + ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second) + defer cancel() + + var polecat gastownv1alpha1.Polecat + if err := k8s.Get(ctx, types.NamespacedName{Namespace: cfg.Namespace, Name: name}, &polecat); err != nil { + if apierrors.IsNotFound(err) { + writeErr(w, http.StatusNotFound, "job not found") + return + } + writeErr(w, http.StatusInternalServerError, err.Error()) + return + } + + msg := "" + for _, c := range polecat.Status.Conditions { + if c.Status == metav1.ConditionTrue { + msg = c.Message + break + } + } + + writeJSON(w, http.StatusOK, jobStatusResponse{ + Name: polecat.Name, + Namespace: polecat.Namespace, + Phase: string(polecat.Status.Phase), + PodName: polecat.Status.PodName, + PodActive: polecat.Status.PodActive, + BeadID: polecat.Status.AssignedBead, + Message: msg, + }) + } +} + +func writeJSON(w http.ResponseWriter, code int, v any) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(code) + _ = json.NewEncoder(w).Encode(v) +} + +func writeErr(w http.ResponseWriter, code int, msg string) { + writeJSON(w, code, map[string]string{"error": msg}) +} + +func sanitizeName(in string) string { + in = strings.ToLower(strings.TrimSpace(in)) + var b strings.Builder + for _, r := range in { + if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' { + b.WriteRune(r) + } + } + out := strings.Trim(b.String(), "-") + if len(out) > 40 { + out = out[:40] + } + return out +} + +// sanitizeLabel makes a value safe for a Kubernetes label (DNS-ish subset). +func sanitizeLabel(in string) string { + in = strings.ToLower(strings.TrimSpace(in)) + var b strings.Builder + for _, r := range in { + if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' || r == '.' || r == '_' { + b.WriteRune(r) + } else { + b.WriteByte('-') + } + } + out := strings.Trim(b.String(), "-_.") + if out == "" { + return "unknown" + } + if len(out) > 63 { + out = out[:63] + } + return out +} + +func shortID() string { + var b [4]byte + _, _ = rand.Read(b[:]) + return hex.EncodeToString(b[:]) +} diff --git a/bte-promo-script/api/s3.go b/bte-promo-script/api/s3.go new file mode 100644 index 0000000..88f0324 --- /dev/null +++ b/bte-promo-script/api/s3.go @@ -0,0 +1,64 @@ +package main + +import ( + "fmt" + "log" + "strings" +) + +type artifact struct { + Key string `json:"key"` + FilePath string `json:"file_path"` + FileURL string `json:"file_url"` + S3URI string `json:"s3_uri"` + S3Key string `json:"s3_key"` +} + +type filePayload struct { + Key string `json:"key"` + FilePath string `json:"file_path"` + Script string `json:"script,omitempty"` +} + +// uploadPromoArtifacts logs each key/path and returns hardcoded URLs until S3 upload exists. +func uploadPromoArtifacts(jobName, requestID string, files []filePayload) ([]artifact, error) { + if len(files) == 0 { + return nil, fmt.Errorf("at least one file is required") + } + + out := make([]artifact, 0, len(files)) + for _, f := range files { + key := strings.TrimSpace(f.Key) + filePath := strings.TrimSpace(f.FilePath) + + if key == "" { + return nil, fmt.Errorf("each file must include key") + } + if filePath == "" { + return nil, fmt.Errorf("key %q: file_path is required", key) + } + + log.Printf("upload: key=%q path=%q job=%q request_id=%q", key, filePath, jobName, requestID) + + fileURL := fmt.Sprintf("%s/%s", strings.TrimRight(StubFileURLBase, "/"), key) + s3Key := fmt.Sprintf("stub/%s/%s", jobName, key) + + out = append(out, artifact{ + Key: key, + FilePath: filePath, + FileURL: fileURL, + S3URI: fileURL, + S3Key: s3Key, + }) + } + + return out, nil +} + +func artifactsByKey(artifacts []artifact) map[string]artifact { + m := make(map[string]artifact, len(artifacts)) + for _, a := range artifacts { + m[a.Key] = a + } + return m +} diff --git a/bte-promo-script/api/source_documents.go b/bte-promo-script/api/source_documents.go new file mode 100644 index 0000000..c9675ed --- /dev/null +++ b/bte-promo-script/api/source_documents.go @@ -0,0 +1,75 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/url" + "strings" +) + +const ( + AnnotationSourceDocuments = "gastown.io/source-documents" + maxSourceDocuments = 100 +) + +func normalizeSourceDocuments(in []string) ([]string, error) { + if len(in) == 0 { + return nil, nil + } + if len(in) > maxSourceDocuments { + return nil, fmt.Errorf("source_documents: max %d URLs", maxSourceDocuments) + } + + out := make([]string, 0, len(in)) + seen := make(map[string]struct{}, len(in)) + for i, raw := range in { + u := strings.TrimSpace(raw) + if u == "" { + return nil, fmt.Errorf("source_documents[%d]: empty URL", i) + } + parsed, err := url.Parse(u) + if err != nil { + return nil, fmt.Errorf("source_documents[%d]: invalid URL", i) + } + if parsed.Scheme != "http" && parsed.Scheme != "https" { + return nil, fmt.Errorf("source_documents[%d]: URL must be http or https", i) + } + if parsed.Host == "" { + return nil, fmt.Errorf("source_documents[%d]: URL must include host", i) + } + if _, dup := seen[u]; dup { + return nil, fmt.Errorf("source_documents[%d]: duplicate URL", i) + } + seen[u] = struct{}{} + out = append(out, u) + } + return out, nil +} + +func sourceDocumentsAnnotation(urls []string) (string, error) { + if len(urls) == 0 { + return "", nil + } + raw, err := json.Marshal(urls) + if err != nil { + return "", err + } + return string(raw), nil +} + +func showSourceDir(jobName string) string { + return fmt.Sprintf("%s/show source/%s", DefaultPromoWorkspacePath, jobName) +} + +func sourceDocumentsTaskBlock(jobName string, count int) string { + if count == 0 { + return "" + } + dir := showSourceDir(jobName) + return fmt.Sprintf(` +SOURCE EPISODE SCRIPTS (optional canon input — read before W2): +Directory: %s +Files: ep001.txt through ep%03d.txt (extracted from source_documents URLs) +Use these for episode-level canon when generating the promo. +`, dir, count) +} diff --git a/bte-promo-script/api/source_documents_test.go b/bte-promo-script/api/source_documents_test.go new file mode 100644 index 0000000..ab4ae94 --- /dev/null +++ b/bte-promo-script/api/source_documents_test.go @@ -0,0 +1,45 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNormalizeSourceDocuments(t *testing.T) { + t.Run("empty ok", func(t *testing.T) { + got, err := normalizeSourceDocuments(nil) + require.NoError(t, err) + assert.Nil(t, got) + }) + + t.Run("valid https", func(t *testing.T) { + urls := []string{ + "https://example.com/a.docx", + "https://example.com/b.docx", + } + got, err := normalizeSourceDocuments(urls) + require.NoError(t, err) + assert.Equal(t, urls, got) + }) + + t.Run("reject file scheme", func(t *testing.T) { + _, err := normalizeSourceDocuments([]string{"file:///tmp/x.docx"}) + require.Error(t, err) + }) + + t.Run("reject duplicate", func(t *testing.T) { + _, err := normalizeSourceDocuments([]string{ + "https://example.com/a.docx", + "https://example.com/a.docx", + }) + require.Error(t, err) + }) +} + +func TestSourceDocumentsAnnotation(t *testing.T) { + raw, err := sourceDocumentsAnnotation([]string{"https://a.test/1.docx"}) + require.NoError(t, err) + assert.Contains(t, raw, "https://a.test/1.docx") +} diff --git a/bte-promo-script/api/webhook.go b/bte-promo-script/api/webhook.go new file mode 100644 index 0000000..0f71342 --- /dev/null +++ b/bte-promo-script/api/webhook.go @@ -0,0 +1,54 @@ +package main + +import ( + "context" + "encoding/json" + "log" + "net/http" + "strings" + "time" +) + +func postGenAxisWebhook(cfg config, eventType, requestID string, result map[string]any, errMsg string) { + payload := map[string]any{ + "type": eventType, + "request_id": requestID, + "result": result, + "error": errMsg, + } + body, err := json.Marshal(payload) + if err != nil { + log.Printf("webhook: marshal error: %v", err) + return + } + + log.Printf("webhook: [promo-api→GenAxis] POST %s type=%s request_id=%s body=%s", cfg.WebhookURL, eventType, requestID, string(body)) + + if cfg.WebhookURL == "" { + log.Printf("webhook: skipped (no URL configured)") + return + } + if cfg.GenAxisAPIKey == "" { + log.Printf("webhook: skipped (GENAXIS_API_KEY not set)") + return + } + + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, cfg.WebhookURL, strings.NewReader(string(body))) + if err != nil { + log.Printf("webhook: request error: %v", err) + return + } + req.Header.Set("Content-Type", "application/json") + req.Header.Set("X-API-Key", cfg.GenAxisAPIKey) + + resp, err := http.DefaultClient.Do(req) + if err != nil { + log.Printf("webhook: post error: %v", err) + return + } + defer resp.Body.Close() + log.Printf("webhook: POST %s -> HTTP %d", cfg.WebhookURL, resp.StatusCode) +} diff --git a/bte-promo-script/deploy/apply-secrets.sh b/bte-promo-script/deploy/apply-secrets.sh new file mode 100755 index 0000000..3a64fda --- /dev/null +++ b/bte-promo-script/deploy/apply-secrets.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# Create/update K8s secrets for promo stack. Pods inject these via secretKeyRef +# (see deploy/madeye-proxy.yaml and deploy/bte-promo-script.yaml). +# +# Usage: +# cp secrets.env.example secrets.env # fill in keys once +# ./bte-promo-script/deploy/apply-secrets.sh +# +# Or: SECRETS_FILE=/path/to/env ./apply-secrets.sh +set -euo pipefail + +BTE="$(cd "$(dirname "$0")/.." && pwd)" +NS="${NAMESPACE:-gastown-system}" +CONTEXT="${KUBE_CONTEXT:-docker-desktop}" + +SECRETS_FILE="${SECRETS_FILE:-${BTE}/secrets.env}" +if [[ ! -f "${SECRETS_FILE}" && -f "${BTE}/.env" ]]; then + SECRETS_FILE="${BTE}/.env" +fi + +if [[ ! -f "${SECRETS_FILE}" ]]; then + echo "ERROR: missing secrets file." + echo " cp ${BTE}/secrets.env.example ${BTE}/secrets.env" + echo " edit GENAXIS_API_KEY and MADEYE_API_KEY, then re-run." + exit 1 +fi + +# shellcheck disable=SC1090 +source "${SECRETS_FILE}" + +: "${GENAXIS_API_KEY:?set GENAXIS_API_KEY in ${SECRETS_FILE}}" +: "${MADEYE_API_KEY:?set MADEYE_API_KEY in ${SECRETS_FILE}}" + +kubectl config use-context "${CONTEXT}" >/dev/null +kubectl get ns "${NS}" >/dev/null 2>&1 || kubectl create ns "${NS}" + +echo "==> Applying K8s secrets in namespace ${NS} (from ${SECRETS_FILE})" +echo " PROXY_MASTER_KEY and MADEYE_USER_EMAIL come from api/defaults.go — not K8s." + +kubectl -n "${NS}" create secret generic madeye-proxy-secrets \ + --from-literal=MADEYE_API_KEY="${MADEYE_API_KEY}" \ + --dry-run=client -o yaml | kubectl apply -f - + +kubectl -n "${NS}" create secret generic genaxis-auth \ + --from-literal=api-key="${GENAXIS_API_KEY}" \ + --dry-run=client -o yaml | kubectl apply -f - + +echo "Secrets ready:" +echo " madeye-proxy-secrets → MADEYE_API_KEY (madeye-proxy pod)" +echo " genaxis-auth → api-key (promo-api → GenAxis webhooks)" diff --git a/bte-promo-script/deploy/bte-promo-script.yaml b/bte-promo-script/deploy/bte-promo-script.yaml new file mode 100644 index 0000000..5d3915f --- /dev/null +++ b/bte-promo-script/deploy/bte-promo-script.yaml @@ -0,0 +1,130 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: promo-api + namespace: gastown-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: promo-api + namespace: gastown-system +rules: + - apiGroups: ["gastown.gastown.io"] + resources: ["polecats"] + verbs: ["create", "get", "list", "watch", "patch"] + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: promo-api + namespace: gastown-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: promo-api +subjects: + - kind: ServiceAccount + name: promo-api + namespace: gastown-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: promo-api-rig-reader +rules: + - apiGroups: ["gastown.gastown.io"] + resources: ["rigs"] + verbs: ["get", "list"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: promo-api-rig-reader +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: promo-api-rig-reader +subjects: + - kind: ServiceAccount + name: promo-api + namespace: gastown-system +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: promo-api + namespace: gastown-system + labels: + app: promo-api +spec: + replicas: 1 + selector: + matchLabels: + app: promo-api + template: + metadata: + labels: + app: promo-api + spec: + serviceAccountName: promo-api + containers: + - name: promo-api + image: promo-api:local + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + name: http + env: + - name: PORT + value: "8080" + - name: NAMESPACE + value: gastown-system + - name: GIT_SECRET + value: git-creds + - name: MADEYE_PROXY_URL + value: http://madeye-proxy.gastown-system.svc:4000 + - name: AGENT_IMAGE + value: polecat-agent:local + - name: GENAXIS_API_KEY + valueFrom: + secretKeyRef: + name: genaxis-auth + key: api-key + readinessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 10 + periodSeconds: 15 + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + cpu: 200m + memory: 256Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: promo-api + namespace: gastown-system +spec: + type: NodePort + selector: + app: promo-api + ports: + - name: http + port: 8080 + targetPort: http + nodePort: 30080 diff --git a/bte-promo-script/deploy/deploy-infra.sh b/bte-promo-script/deploy/deploy-infra.sh new file mode 100755 index 0000000..dd9110f --- /dev/null +++ b/bte-promo-script/deploy/deploy-infra.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# Deploy base infra on Docker Desktop Kubernetes: +# gastown-operator + madeye-proxy + Rig (polecat pods come from deploy-promo.sh) +set -euo pipefail + +BTE="$(cd "$(dirname "$0")/.." && pwd)" +ROOT="$(cd "${BTE}/.." && pwd)" +DEFAULTS_GO="${BTE}/api/defaults.go" +IMG="${IMG:-gastown-operator:bte-$(date +%Y%m%d%H%M%S)}" +CONTEXT="${KUBE_CONTEXT:-docker-desktop}" +NS_WORKLOAD="gastown-system" + +# shellcheck source=lib/require-k8s-secrets.sh +source "${BTE}/deploy/lib/require-k8s-secrets.sh" + +go_default() { + local name="$1" + sed -n "s/.*${name}[[:space:]]*=[[:space:]]*\"\\([^\"]*\\)\".*/\\1/p" "${DEFAULTS_GO}" | head -1 +} +GIT_REPO="$(go_default DefaultRigGitURL)" +RIG_NAME="$(go_default DefaultRigName)" +PROXY_MASTER_KEY="$(go_default DefaultProxyMasterKey)" +MADEYE_USER_EMAIL="$(go_default DefaultMadEyeUserEmail)" +: "${GIT_REPO:?could not read DefaultRigGitURL from ${DEFAULTS_GO}}" +: "${RIG_NAME:?could not read DefaultRigName from ${DEFAULTS_GO}}" +: "${PROXY_MASTER_KEY:?could not read DefaultProxyMasterKey from ${DEFAULTS_GO}}" +: "${MADEYE_USER_EMAIL:?could not read DefaultMadEyeUserEmail from ${DEFAULTS_GO}}" + +cd "${ROOT}" + +echo "==> Checking Docker Desktop Kubernetes (${CONTEXT})" +kubectl config use-context "${CONTEXT}" >/dev/null +kubectl get nodes >/dev/null + +echo "==> Checking K8s secrets (MADEYE_API_KEY, GENAXIS_API_KEY injected via secretKeyRef)" +require_promo_secrets "${NS_WORKLOAD}" + +echo "==> Building operator image ${IMG}" +if [[ "${DOCKER_NO_CACHE:-}" == "1" ]]; then + docker build --no-cache -t "${IMG}" -f "${ROOT}/Dockerfile" "${ROOT}" +else + make docker-build-e2e IMG="${IMG}" +fi + +echo "==> Installing CRDs" +make install + +echo "==> Deploying operator" +make deploy IMG="${IMG}" + +OP_NS="gastown-operator-system" +kubectl -n "${OP_NS}" set image deploy/gastown-operator-controller-manager manager="${IMG}" +kubectl -n "${OP_NS}" patch deploy gastown-operator-controller-manager --type=json \ + -p='[{"op":"replace","path":"/spec/template/spec/containers/0/imagePullPolicy","value":"IfNotPresent"}]' \ + >/dev/null || true +kubectl -n "${OP_NS}" rollout status deploy/gastown-operator-controller-manager --timeout=180s + +echo "==> Ensuring workload namespace ${NS_WORKLOAD}" +kubectl get ns "${NS_WORKLOAD}" >/dev/null 2>&1 || kubectl create ns "${NS_WORKLOAD}" + +PROXY_TAG="${MADEYE_PROXY_TAG:-bte-$(date +%Y%m%d%H%M%S)}" +echo "==> Building madeye-proxy tag=${PROXY_TAG}" +docker build -f "${BTE}/madeye-proxy/Dockerfile" -t "madeye-proxy:${PROXY_TAG}" -t madeye-proxy:local . + +echo "==> Deploying madeye-proxy (Anthropic → OpenAI → MadEye)" +kubectl apply -f "${BTE}/deploy/madeye-proxy.yaml" +kubectl -n "${NS_WORKLOAD}" set env deploy/madeye-proxy \ + PROXY_MASTER_KEY="${PROXY_MASTER_KEY}" \ + MADEYE_USER_EMAIL="${MADEYE_USER_EMAIL}" +kubectl -n "${NS_WORKLOAD}" set image deploy/madeye-proxy madeye-proxy="madeye-proxy:${PROXY_TAG}" +kubectl -n "${NS_WORKLOAD}" rollout status deploy/madeye-proxy --timeout=180s + +echo "==> Applying Rig ${RIG_NAME}" +TMP_RIG="$(mktemp)" +sed \ + -e "s|GIT_REPO_PLACEHOLDER|${GIT_REPO}|g" \ + -e "s|name: promo-script-tool|name: ${RIG_NAME}|g" \ + "${BTE}/deploy/rig.yaml.tpl" > "${TMP_RIG}" +kubectl apply -f "${TMP_RIG}" +rm -f "${TMP_RIG}" + +echo +echo "Infra ready (Rig: ${RIG_NAME}). Next: ./bte-promo-script/deploy/deploy-promo.sh" diff --git a/bte-promo-script/deploy/deploy-promo.sh b/bte-promo-script/deploy/deploy-promo.sh new file mode 100755 index 0000000..7689650 --- /dev/null +++ b/bte-promo-script/deploy/deploy-promo.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +# Build and deploy promo-api + polecat-agent (includes tools/finish → promo-finish). +set -euo pipefail +BTE="$(cd "$(dirname "$0")/.." && pwd)" +ROOT="$(cd "${BTE}/.." && pwd)" +cd "$ROOT" + +# shellcheck source=lib/require-k8s-secrets.sh +source "${BTE}/deploy/lib/require-k8s-secrets.sh" + +CONTEXT="${KUBE_CONTEXT:-docker-desktop}" +kubectl config use-context "${CONTEXT}" >/dev/null + +echo "==> Checking K8s secrets (GENAXIS_API_KEY injected via secretKeyRef on promo-api)" +require_promo_secrets gastown-system + +TAG="${PROMO_API_TAG:-bte-$(date +%Y%m%d%H%M%S)}" +PAGENT_TAG="${POLECAT_AGENT_TAG:-${TAG}}" + +CACHE_FLAG="" +if [[ "${DOCKER_NO_CACHE:-}" == "1" ]]; then + CACHE_FLAG="--no-cache" +fi + +echo "==> Building polecat-agent (includes tools/finish) tag=${PAGENT_TAG}" +docker build ${CACHE_FLAG} -f images/polecat-agent/Dockerfile -t "polecat-agent:${PAGENT_TAG}" -t polecat-agent:local . + +echo "==> Building promo-api tag=${TAG}" +docker buildx build ${CACHE_FLAG} --load -t "promo-api:${TAG}" -t promo-api:local -f "${BTE}/api/Dockerfile" . + +echo "==> Applying manifest" +kubectl apply -f "${BTE}/deploy/bte-promo-script.yaml" + +kubectl -n gastown-system set image deploy/promo-api promo-api="promo-api:${TAG}" +kubectl -n gastown-system set env deploy/promo-api AGENT_IMAGE="polecat-agent:${PAGENT_TAG}" +kubectl -n gastown-system set env deploy/promo-api GIT_REPO- GIT_BRANCH- WEBHOOK_URL- RIG_NAME- >/dev/null + +echo "==> Ensuring Rig" +DEFAULTS_GO="${BTE}/api/defaults.go" +go_default() { sed -n "s/.*${1}[[:space:]]*=[[:space:]]*\"\\([^\"]*\\)\".*/\\1/p" "${DEFAULTS_GO}" | head -1; } +RIG_NAME="$(go_default DefaultRigName)" +GIT_REPO="$(go_default DefaultRigGitURL)" +TMP_RIG="$(mktemp)" +sed \ + -e "s|GIT_REPO_PLACEHOLDER|${GIT_REPO}|g" \ + -e "s|name: promo-script-tool|name: ${RIG_NAME}|g" \ + "${BTE}/deploy/rig.yaml.tpl" > "${TMP_RIG}" +kubectl apply -f "${TMP_RIG}" +rm -f "${TMP_RIG}" + +kubectl -n gastown-system scale deploy/promo-api --replicas=1 +kubectl -n gastown-system delete pod -l app=promo-api --ignore-not-found --wait=false +kubectl -n gastown-system rollout status deploy/promo-api --timeout=180s + +echo +echo "promo-api ready" +if grep -q 'DefaultDevOutputHostPath = "/Users' "${BTE}/api/defaults.go" 2>/dev/null; then + DEV_OUT="$(sed -n 's/.*DefaultDevOutputHostPath = "\([^"]*\)".*/\1/p' "${BTE}/api/defaults.go" | head -1)" + if [[ -n "${DEV_OUT}" ]]; then + mkdir -p "${DEV_OUT}" + chmod 777 "${DEV_OUT}" 2>/dev/null || true + echo "NOTE (LOCAL TEST ONLY): W4 script saves via HTTP dev-save (hostPath does not sync on Docker Desktop Mac)." + echo " 1. Run: python3 ${BTE}/deploy/dev-webhook-catcher.py" + echo " 2. Set: kubectl -n gastown-system set env deploy/promo-api GENAXIS_WEBHOOK_URL='http://host.docker.internal:9999/v1/bte/internal/webhook'" + echo " 3. Scripts land in ${DEV_OUT}/.md" + fi +fi diff --git a/bte-promo-script/deploy/dev-webhook-catcher.py b/bte-promo-script/deploy/dev-webhook-catcher.py new file mode 100644 index 0000000..48bf6d8 --- /dev/null +++ b/bte-promo-script/deploy/dev-webhook-catcher.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 +"""Local dev: catch GenAxis webhooks + save W4 scripts to ~/Desktop/bte-script.""" +from http.server import HTTPServer, BaseHTTPRequestHandler +import json +import os +from pathlib import Path + +OUT_DIR = Path(os.environ.get("BTE_SCRIPT_DIR", Path.home() / "Desktop" / "bte-script")) +OUT_DIR.mkdir(parents=True, exist_ok=True) + + +class Handler(BaseHTTPRequestHandler): + def do_POST(self): + length = int(self.headers.get("Content-Length", 0)) + body = self.rfile.read(length) + data = json.loads(body) if body else {} + + if self.path.rstrip("/") == "/v1/bte/internal/dev-save": + filename = data.get("filename") or f"{data.get('job_name', 'script')}.md" + content = data.get("content", "") + dest = OUT_DIR / Path(filename).name + dest.write_text(content, encoding="utf-8") + print(f"\n=== DEV-SAVE ===\n => {dest}\n bytes={len(content.encode('utf-8'))}\n") + self._ok({"saved": str(dest)}) + return + + if self.path.rstrip("/") == "/v1/bte/internal/webhook": + print("\n=== WEBHOOK ===\n", json.dumps(data, indent=2)) + self._ok({"ok": True}) + return + + print(f"\n=== POST {self.path} ===\n", json.dumps(data, indent=2)) + self._ok({"ok": True}) + + def _ok(self, payload): + self.send_response(200) + self.send_header("Content-Type", "application/json") + self.end_headers() + self.wfile.write(json.dumps(payload).encode()) + + def log_message(self, *args): + pass + + +if __name__ == "__main__": + port = int(os.environ.get("PORT", "9999")) + print(f"Listening :{port}") + print(f" webhooks => /v1/bte/internal/webhook") + print(f" W4 save => /v1/bte/internal/dev-save -> {OUT_DIR}/") + HTTPServer(("0.0.0.0", port), Handler).serve_forever() diff --git a/bte-promo-script/deploy/lib/require-k8s-secrets.sh b/bte-promo-script/deploy/lib/require-k8s-secrets.sh new file mode 100644 index 0000000..f8f3c95 --- /dev/null +++ b/bte-promo-script/deploy/lib/require-k8s-secrets.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +# shellcheck shell=bash +require_k8s_secret() { + local ns="$1" + local name="$2" + if ! kubectl -n "${ns}" get secret "${name}" >/dev/null 2>&1; then + echo "ERROR: missing secret ${name} in namespace ${ns}." + echo " Run: ./bte-promo-script/deploy/apply-secrets.sh" + exit 1 + fi +} + +require_promo_secrets() { + local ns="${1:-gastown-system}" + require_k8s_secret "${ns}" madeye-proxy-secrets + require_k8s_secret "${ns}" genaxis-auth +} diff --git a/bte-promo-script/deploy/madeye-proxy.yaml b/bte-promo-script/deploy/madeye-proxy.yaml new file mode 100644 index 0000000..8d12c57 --- /dev/null +++ b/bte-promo-script/deploy/madeye-proxy.yaml @@ -0,0 +1,70 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: madeye-proxy + namespace: gastown-system + labels: + app: madeye-proxy +spec: + replicas: 1 + selector: + matchLabels: + app: madeye-proxy + template: + metadata: + labels: + app: madeye-proxy + spec: + containers: + - name: madeye-proxy + image: madeye-proxy:local + imagePullPolicy: IfNotPresent + ports: + - containerPort: 4000 + name: http + env: + - name: PORT + value: "4000" + - name: MADEYE_BASE_URL + value: https://madeye.internal.pocketfm.org + - name: MADEYE_UPSTREAM_MODEL + value: claude-opus-4-8 + - name: MADEYE_API_KEY + valueFrom: + secretKeyRef: + name: madeye-proxy-secrets + key: MADEYE_API_KEY + readinessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 10 + periodSeconds: 15 + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + cpu: 500m + memory: 256Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: madeye-proxy + namespace: gastown-system +spec: + type: NodePort + selector: + app: madeye-proxy + ports: + - name: http + port: 4000 + targetPort: http + nodePort: 30040 diff --git a/bte-promo-script/deploy/prod/README.md b/bte-promo-script/deploy/prod/README.md new file mode 100644 index 0000000..2d3ef08 --- /dev/null +++ b/bte-promo-script/deploy/prod/README.md @@ -0,0 +1,34 @@ +# BTE Gastown — production Kubernetes manifests +# +# Namespace: bte-gastown +# Architecture: Pod 1 (infra-monolith) + Pod 2 per job (polecat/claude) +# +# Prerequisites (infra team): +# - EKS cluster + IRSA role bte-gastown-role +# - AWS Secrets Manager path bte-gastown/prod/bte-gastown +# - External Secrets Operator installed +# - gastown-operator CRDs installed (make install / helm) +# - ECR images: bte-gastown, promo-api, madeye-proxy, polecat-agent +# - DNS: bte-gastown.pocketfm.org → ingress +# +# Apply order: +# 1. kubectl apply -f namespace.yaml +# 2. make install # CRDs + gastown-operator-manager-role (from repo root) +# 3. kubectl apply -f serviceaccount.yaml +# 4. kubectl apply -f secret-store.yaml +# 5. kubectl apply -f external-secret.yaml # wait for secrets +# 6. kubectl apply -f rbac.yaml +# 7. Edit infra-monolith.yaml — set image URLs +# 8. kubectl apply -f infra-monolith.yaml +# 9. kubectl apply -f services.yaml +# 10. kubectl apply -f ingress.yaml +# 11. kubectl apply -f rig.yaml +# +# Skipped (later): +# - S3 upload + CloudFront URL in promo-api +# - HPA (Pod 1 min 1 max 2) +# - KEDA ScaledObject (Pod 2 max 4 parallel jobs) +# +# Resource budget (from load test): +# Pod 1 infra-monolith: 1 CPU / 1Gi total +# Pod 2 polecat job: 2 CPU / 2Gi (set in promo-api Polecat CR) diff --git a/bte-promo-script/deploy/prod/external-secret.yaml b/bte-promo-script/deploy/prod/external-secret.yaml new file mode 100644 index 0000000..4dd94fb --- /dev/null +++ b/bte-promo-script/deploy/prod/external-secret.yaml @@ -0,0 +1,56 @@ +# Pulls bte-gastown/prod/bte-gastown from AWS Secrets Manager. +# S3_BUCKET_NAME included for future use — upload handler still stubbed in promo-api. +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: bte-gastown-external-secret + namespace: bte-gastown +spec: + refreshInterval: 1h + secretStoreRef: + name: bte-gastown-secret-store + kind: SecretStore + target: + name: bte-gastown-external-secret + creationPolicy: Owner + data: + - secretKey: MADEYE_API_KEY + remoteRef: + key: bte-gastown/prod/bte-gastown + property: MADEYE_API_KEY + - secretKey: MADEYE_BASE_URL + remoteRef: + key: bte-gastown/prod/bte-gastown + property: MADEYE_BASE_URL + - secretKey: GENAXIS_API_KEY + remoteRef: + key: bte-gastown/prod/bte-gastown + property: GENAXIS_API_KEY + - secretKey: PROXY_MASTER_KEY + remoteRef: + key: bte-gastown/prod/bte-gastown + property: PROXY_MASTER_KEY + - secretKey: S3_BUCKET_NAME + remoteRef: + key: bte-gastown/prod/bte-gastown + property: S3_BUCKET_NAME +--- +# Polecat → madeye-proxy auth (same PROXY_MASTER_KEY, key name expected by operator). +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: madeye-proxy-auth + namespace: bte-gastown +spec: + refreshInterval: 1h + secretStoreRef: + name: bte-gastown-secret-store + kind: SecretStore + target: + name: madeye-proxy-auth + creationPolicy: Owner + data: + - secretKey: master-key + remoteRef: + key: bte-gastown/prod/bte-gastown + property: PROXY_MASTER_KEY diff --git a/bte-promo-script/deploy/prod/infra-monolith.yaml b/bte-promo-script/deploy/prod/infra-monolith.yaml new file mode 100644 index 0000000..90842f4 --- /dev/null +++ b/bte-promo-script/deploy/prod/infra-monolith.yaml @@ -0,0 +1,154 @@ +# Pod 1 — infra-monolith: madeye-proxy + promo-api + operator (always on). +# Job pods (Pod 2) are created by operator per POST /v1/promo/generate. +# +# Replace image placeholders with ECR URLs before apply. +apiVersion: apps/v1 +kind: Deployment +metadata: + name: infra-monolith + namespace: bte-gastown + labels: + app.kubernetes.io/name: bte-gastown + app.kubernetes.io/component: infra-monolith +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: infra-monolith + template: + metadata: + labels: + app.kubernetes.io/name: bte-gastown + app.kubernetes.io/component: infra-monolith + spec: + serviceAccountName: bte-gastown-sa + containers: + - name: madeye-proxy + image: /madeye-proxy:latest + imagePullPolicy: Always + ports: + - containerPort: 4000 + name: proxy + env: + - name: PORT + value: "4000" + - name: MADEYE_UPSTREAM_MODEL + value: claude-opus-4-8 + - name: MADEYE_API_KEY + valueFrom: + secretKeyRef: + name: bte-gastown-external-secret + key: MADEYE_API_KEY + - name: MADEYE_BASE_URL + valueFrom: + secretKeyRef: + name: bte-gastown-external-secret + key: MADEYE_BASE_URL + - name: PROXY_MASTER_KEY + valueFrom: + secretKeyRef: + name: bte-gastown-external-secret + key: PROXY_MASTER_KEY + - name: MADEYE_USER_EMAIL + valueFrom: + secretKeyRef: + name: bte-gastown-external-secret + key: MADEYE_USER_EMAIL + optional: true + readinessProbe: + httpGet: + path: /healthz + port: proxy + initialDelaySeconds: 3 + periodSeconds: 5 + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 256Mi + - name: promo-api + image: /promo-api:latest + imagePullPolicy: Always + ports: + - containerPort: 8080 + name: http + env: + - name: PORT + value: "8080" + - name: NAMESPACE + value: bte-gastown + - name: MADEYE_PROXY_URL + value: http://127.0.0.1:4000 + - name: POLECAT_MADEYE_PROXY_URL + value: http://madeye-proxy.bte-gastown.svc:4000 + - name: AGENT_IMAGE + value: /polecat-agent:latest + - name: GENAXIS_API_KEY + valueFrom: + secretKeyRef: + name: bte-gastown-external-secret + key: GENAXIS_API_KEY + readinessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: 10 + periodSeconds: 15 + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 384Mi + - name: operator + image: /bte-gastown:latest + imagePullPolicy: Always + command: ["/manager"] + args: + - --leader-elect + - --health-probe-bind-address=:8081 + env: + - name: GASTOWN_NAMESPACE + value: bte-gastown + ports: + - containerPort: 8081 + name: probes + securityContext: + readOnlyRootFilesystem: true + allowPrivilegeEscalation: false + capabilities: + drop: ["ALL"] + livenessProbe: + httpGet: + path: /healthz + port: probes + initialDelaySeconds: 15 + periodSeconds: 20 + readinessProbe: + httpGet: + path: /readyz + port: probes + initialDelaySeconds: 5 + periodSeconds: 10 + volumeMounts: + - name: operator-tmp + mountPath: /tmp + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 384Mi + volumes: + - name: operator-tmp + emptyDir: {} diff --git a/bte-promo-script/deploy/prod/ingress.yaml b/bte-promo-script/deploy/prod/ingress.yaml new file mode 100644 index 0000000..c8d8e61 --- /dev/null +++ b/bte-promo-script/deploy/prod/ingress.yaml @@ -0,0 +1,21 @@ +# gen-axis → promo-api (HTTPS). Infra team: attach internal ingress controller + DNS. +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: bte-gastown + namespace: bte-gastown + annotations: + # Example — adjust for your ingress controller (ALB, nginx, etc.) + kubernetes.io/ingress.class: internal +spec: + rules: + - host: bte-gastown.pocketfm.org + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: promo-api + port: + number: 8080 diff --git a/bte-promo-script/deploy/prod/namespace.yaml b/bte-promo-script/deploy/prod/namespace.yaml new file mode 100644 index 0000000..b265bb2 --- /dev/null +++ b/bte-promo-script/deploy/prod/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: bte-gastown + labels: + app.kubernetes.io/name: bte-gastown diff --git a/bte-promo-script/deploy/prod/rbac.yaml b/bte-promo-script/deploy/prod/rbac.yaml new file mode 100644 index 0000000..be3dcf3 --- /dev/null +++ b/bte-promo-script/deploy/prod/rbac.yaml @@ -0,0 +1,94 @@ +# promo-api: create Polecat CRs +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: promo-api + namespace: bte-gastown +rules: + - apiGroups: ["gastown.gastown.io"] + resources: ["polecats"] + verbs: ["create", "get", "list", "watch", "patch"] + - apiGroups: [""] + resources: ["secrets"] + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: promo-api + namespace: bte-gastown +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: promo-api +subjects: + - kind: ServiceAccount + name: bte-gastown-sa + namespace: bte-gastown +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: bte-gastown-promo-api-rig-reader +rules: + - apiGroups: ["gastown.gastown.io"] + resources: ["rigs"] + verbs: ["get", "list"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: bte-gastown-promo-api-rig-reader +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: bte-gastown-promo-api-rig-reader +subjects: + - kind: ServiceAccount + name: bte-gastown-sa + namespace: bte-gastown +--- +# operator: manage polecat pods + CRs (install CRDs + ClusterRole via helm/kustomize separately). +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: bte-gastown-operator +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: gastown-operator-manager-role +subjects: + - kind: ServiceAccount + name: bte-gastown-sa + namespace: bte-gastown +--- +# operator leader election in bte-gastown namespace +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: bte-gastown-leader-election + namespace: bte-gastown +rules: + - apiGroups: [""] + resources: ["configmaps"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] + - apiGroups: [""] + resources: ["events"] + verbs: ["create", "patch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: bte-gastown-leader-election + namespace: bte-gastown +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: bte-gastown-leader-election +subjects: + - kind: ServiceAccount + name: bte-gastown-sa + namespace: bte-gastown diff --git a/bte-promo-script/deploy/prod/rig.yaml b/bte-promo-script/deploy/prod/rig.yaml new file mode 100644 index 0000000..e602e0c --- /dev/null +++ b/bte-promo-script/deploy/prod/rig.yaml @@ -0,0 +1,11 @@ +apiVersion: gastown.gastown.io/v1alpha1 +kind: Rig +metadata: + name: promo-script-tool + namespace: bte-gastown +spec: + gitURL: "file:///promo-tool" + beadsPrefix: "pst" + settings: + namepoolTheme: "mad-max" + maxPolecats: 4 diff --git a/bte-promo-script/deploy/prod/secret-store.yaml b/bte-promo-script/deploy/prod/secret-store.yaml new file mode 100644 index 0000000..a885b4a --- /dev/null +++ b/bte-promo-script/deploy/prod/secret-store.yaml @@ -0,0 +1,14 @@ +apiVersion: external-secrets.io/v1beta1 +kind: SecretStore +metadata: + name: bte-gastown-secret-store + namespace: bte-gastown +spec: + provider: + aws: + service: SecretsManager + region: ap-southeast-1 + auth: + jwt: + serviceAccountRef: + name: bte-gastown-sa diff --git a/bte-promo-script/deploy/prod/serviceaccount.yaml b/bte-promo-script/deploy/prod/serviceaccount.yaml new file mode 100644 index 0000000..d339483 --- /dev/null +++ b/bte-promo-script/deploy/prod/serviceaccount.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: bte-gastown-sa + namespace: bte-gastown + annotations: + # Infra team: set IAM role for operator RBAC + future S3 (IRSA). + eks.amazonaws.com/role-arn: arn:aws:iam:::role/bte-gastown-role diff --git a/bte-promo-script/deploy/prod/services.yaml b/bte-promo-script/deploy/prod/services.yaml new file mode 100644 index 0000000..1224b24 --- /dev/null +++ b/bte-promo-script/deploy/prod/services.yaml @@ -0,0 +1,34 @@ +# Internal services — Pod 2 (polecat) reaches Pod 1 via these DNS names. +apiVersion: v1 +kind: Service +metadata: + name: promo-api + namespace: bte-gastown + labels: + app.kubernetes.io/name: bte-gastown + app.kubernetes.io/component: promo-api +spec: + type: ClusterIP + selector: + app.kubernetes.io/component: infra-monolith + ports: + - name: http + port: 8080 + targetPort: 8080 +--- +apiVersion: v1 +kind: Service +metadata: + name: madeye-proxy + namespace: bte-gastown + labels: + app.kubernetes.io/name: bte-gastown + app.kubernetes.io/component: madeye-proxy +spec: + type: ClusterIP + selector: + app.kubernetes.io/component: infra-monolith + ports: + - name: http + port: 4000 + targetPort: 4000 diff --git a/bte-promo-script/deploy/rig.yaml.tpl b/bte-promo-script/deploy/rig.yaml.tpl new file mode 100644 index 0000000..761a0e6 --- /dev/null +++ b/bte-promo-script/deploy/rig.yaml.tpl @@ -0,0 +1,10 @@ +apiVersion: gastown.gastown.io/v1alpha1 +kind: Rig +metadata: + name: promo-script-tool +spec: + gitURL: "GIT_REPO_PLACEHOLDER" + beadsPrefix: "pst" + settings: + namepoolTheme: "mad-max" + maxPolecats: 2 diff --git a/bte-promo-script/madeye-proxy/Dockerfile b/bte-promo-script/madeye-proxy/Dockerfile new file mode 100644 index 0000000..12cc439 --- /dev/null +++ b/bte-promo-script/madeye-proxy/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.25-alpine AS builder +WORKDIR /src +RUN apk add --no-cache ca-certificates +COPY go.mod go.sum ./ +RUN go mod download +COPY . . +RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/madeye-proxy ./bte-promo-script/madeye-proxy + +FROM gcr.io/distroless/static:nonroot +COPY --from=builder /out/madeye-proxy /madeye-proxy +USER 65532:65532 +EXPOSE 4000 +ENTRYPOINT ["/madeye-proxy"] diff --git a/bte-promo-script/madeye-proxy/convert_request.go b/bte-promo-script/madeye-proxy/convert_request.go new file mode 100644 index 0000000..453d240 --- /dev/null +++ b/bte-promo-script/madeye-proxy/convert_request.go @@ -0,0 +1,241 @@ +package main + +import ( + "encoding/json" + "fmt" + "strings" +) + +func mapModel(name string, upstream string) string { + if upstream != "" { + return upstream + } + return "claude-opus-4-8" +} + +func anthropicToOpenAI(body []byte, upstreamModel, userEmail string) ([]byte, error) { + var req map[string]any + if err := json.Unmarshal(body, &req); err != nil { + return nil, err + } + + msgs, _ := req["messages"].([]any) + clean := make([]map[string]any, 0, len(msgs)) + for _, m := range msgs { + mm, ok := m.(map[string]any) + if !ok { + continue + } + clean = append(clean, mm) + } + clean = stripTrailingAssistant(clean) + + outMsgs := make([]map[string]any, 0, len(clean)+1) + if sys := req["system"]; sys != nil { + if text := contentToString(sys); text != "" { + outMsgs = append(outMsgs, map[string]any{ + "role": "system", + "content": text, + }) + } + } + + for _, msg := range clean { + converted, err := convertAnthropicMessage(msg) + if err != nil { + return nil, err + } + outMsgs = append(outMsgs, converted...) + } + + out := map[string]any{ + "model": mapModel(asString(req["model"]), upstreamModel), + "messages": outMsgs, + } + if v, ok := req["max_tokens"]; ok { + out["max_tokens"] = v + } + if v, ok := req["temperature"]; ok { + out["temperature"] = v + } + if v, ok := req["top_p"]; ok { + out["top_p"] = v + } + // Never stream upstream: the streaming proxy path does not forward tool_calls yet. + // Streaming clients get a synthetic SSE sequence from the full response instead. + if tools := req["tools"]; tools != nil { + if ot, err := convertTools(tools); err == nil && len(ot) > 0 { + out["tools"] = ot + } + } + if tc := req["tool_choice"]; tc != nil { + if otc, err := convertToolChoice(tc); err == nil { + out["tool_choice"] = otc + } + } + if userEmail != "" { + out["metadata"] = map[string]any{"user_email": userEmail} + } + + return json.Marshal(out) +} + +func convertAnthropicMessage(msg map[string]any) ([]map[string]any, error) { + role := roleOf(msg) + content := msg["content"] + + switch role { + case "user": + if blocks, ok := content.([]any); ok { + var toolResults []map[string]any + var textParts []string + for _, b := range blocks { + block, ok := b.(map[string]any) + if !ok { + continue + } + switch asString(block["type"]) { + case "tool_result": + toolResults = append(toolResults, map[string]any{ + "role": "tool", + "tool_call_id": asString(block["tool_use_id"]), + "content": contentToString(block["content"]), + }) + case "text": + if t := asString(block["text"]); t != "" { + textParts = append(textParts, t) + } + default: + if t := contentToString(block); t != "" { + textParts = append(textParts, t) + } + } + } + out := make([]map[string]any, 0, 1+len(toolResults)) + if len(textParts) > 0 { + out = append(out, map[string]any{"role": "user", "content": strings.Join(textParts, "\n")}) + } + for _, tr := range toolResults { + out = append(out, tr) + } + if len(out) == 0 { + out = append(out, map[string]any{"role": "user", "content": ""}) + } + return out, nil + } + return []map[string]any{{"role": "user", "content": contentToString(content)}}, nil + + case "assistant": + text := "" + var toolCalls []map[string]any + if blocks, ok := content.([]any); ok { + for _, b := range blocks { + block, ok := b.(map[string]any) + if !ok { + continue + } + switch asString(block["type"]) { + case "text": + text += asString(block["text"]) + case "tool_use": + args, _ := json.Marshal(block["input"]) + toolCalls = append(toolCalls, map[string]any{ + "id": asString(block["id"]), + "type": "function", + "function": map[string]any{ + "name": asString(block["name"]), + "arguments": string(args), + }, + }) + } + } + } else { + text = contentToString(content) + } + out := map[string]any{"role": "assistant"} + if text != "" { + out["content"] = text + } + if len(toolCalls) > 0 { + out["tool_calls"] = toolCalls + } + return []map[string]any{out}, nil + + default: + return nil, fmt.Errorf("unsupported role %q", role) + } +} + +func convertTools(tools any) ([]map[string]any, error) { + arr, ok := tools.([]any) + if !ok { + return nil, fmt.Errorf("tools not array") + } + out := make([]map[string]any, 0, len(arr)) + for _, t := range arr { + tool, ok := t.(map[string]any) + if !ok { + continue + } + out = append(out, map[string]any{ + "type": "function", + "function": map[string]any{ + "name": asString(tool["name"]), + "description": asString(tool["description"]), + "parameters": tool["input_schema"], + }, + }) + } + return out, nil +} + +func convertToolChoice(tc any) (any, error) { + switch v := tc.(type) { + case string: + if v == "auto" { + return "auto", nil + } + if v == "any" { + return "required", nil + } + return v, nil + case map[string]any: + if asString(v["type"]) == "tool" { + name := asString(v["name"]) + return map[string]any{ + "type": "function", + "function": map[string]any{ + "name": name, + }, + }, nil + } + } + return tc, nil +} + +func contentToString(v any) string { + switch x := v.(type) { + case string: + return x + case []any: + var parts []string + for _, item := range x { + if block, ok := item.(map[string]any); ok { + if asString(block["type"]) == "text" { + parts = append(parts, asString(block["text"])) + } + } + } + return strings.Join(parts, "\n") + case map[string]any: + if asString(x["type"]) == "text" { + return asString(x["text"]) + } + } + return "" +} + +func asString(v any) string { + s, _ := v.(string) + return s +} diff --git a/bte-promo-script/madeye-proxy/convert_response.go b/bte-promo-script/madeye-proxy/convert_response.go new file mode 100644 index 0000000..ee6c607 --- /dev/null +++ b/bte-promo-script/madeye-proxy/convert_response.go @@ -0,0 +1,98 @@ +package main + +import ( + "encoding/json" + "fmt" +) + +func openAIToAnthropic(body []byte, model string) ([]byte, error) { + var resp map[string]any + if err := json.Unmarshal(body, &resp); err != nil { + return nil, err + } + choices, _ := resp["choices"].([]any) + if len(choices) == 0 { + return nil, fmt.Errorf("openai response missing choices") + } + choice, _ := choices[0].(map[string]any) + message, _ := choice["message"].(map[string]any) + + content := make([]map[string]any, 0, 4) + if text, _ := message["content"].(string); text != "" { + content = append(content, map[string]any{"type": "text", "text": text}) + } + if tcs, ok := message["tool_calls"].([]any); ok { + for _, tc := range tcs { + call, _ := tc.(map[string]any) + fn, _ := call["function"].(map[string]any) + var input any + _ = json.Unmarshal([]byte(asString(fn["arguments"])), &input) + if input == nil { + input = map[string]any{} + } + content = append(content, map[string]any{ + "type": "tool_use", + "id": asString(call["id"]), + "name": asString(fn["name"]), + "input": input, + }) + } + } + + stopReason := "end_turn" + if fr := asString(choice["finish_reason"]); fr == "length" { + stopReason = "max_tokens" + } else if fr == "tool_calls" { + stopReason = "tool_use" + } + + usage := map[string]any{"input_tokens": 0, "output_tokens": 0} + if u, ok := resp["usage"].(map[string]any); ok { + usage["input_tokens"] = u["prompt_tokens"] + usage["output_tokens"] = u["completion_tokens"] + } + + out := map[string]any{ + "id": asString(resp["id"]), + "type": "message", + "role": "assistant", + "model": model, + "content": content, + "stop_reason": stopReason, + "stop_sequence": nil, + "usage": usage, + } + if out["id"] == "" { + out["id"] = "msg_madeye_proxy" + } + return json.Marshal(out) +} + +func requestHasTools(body []byte) bool { + var req map[string]any + if json.Unmarshal(body, &req) != nil { + return false + } + tools, ok := req["tools"].([]any) + return ok && len(tools) > 0 +} + +// openAIMissingToolCalls reports upstream claiming tool_calls finish without tool_calls payload. +// Claude Code streaming clients exit after the first text chunk when this happens. +func openAIMissingToolCalls(body []byte) bool { + var resp map[string]any + if json.Unmarshal(body, &resp) != nil { + return false + } + choices, _ := resp["choices"].([]any) + if len(choices) == 0 { + return false + } + choice, _ := choices[0].(map[string]any) + if asString(choice["finish_reason"]) != "tool_calls" { + return false + } + message, _ := choice["message"].(map[string]any) + tcs, _ := message["tool_calls"].([]any) + return len(tcs) == 0 +} diff --git a/bte-promo-script/madeye-proxy/convert_test.go b/bte-promo-script/madeye-proxy/convert_test.go new file mode 100644 index 0000000..a2fb7fe --- /dev/null +++ b/bte-promo-script/madeye-proxy/convert_test.go @@ -0,0 +1,44 @@ +package main + +import ( + "encoding/json" + "testing" +) + +func TestStripTrailingAssistant(t *testing.T) { + msgs := []map[string]any{ + {"role": "user", "content": "hi"}, + {"role": "assistant", "content": "prefill"}, + } + got := stripTrailingAssistant(msgs) + if len(got) != 1 || roleOf(got[0]) != "user" { + t.Fatalf("expected user only, got %#v", got) + } +} + +func TestAnthropicToOpenAI_text(t *testing.T) { + in := []byte(`{ + "model": "claude-sonnet-4", + "max_tokens": 100, + "system": "You are helpful", + "messages": [ + {"role":"user","content":"hello"}, + {"role":"assistant","content":"drop me"} + ] + }`) + out, err := anthropicToOpenAI(in, "claude-opus-4-8", "u@pocketfm.com") + if err != nil { + t.Fatal(err) + } + var req map[string]any + if err := json.Unmarshal(out, &req); err != nil { + t.Fatal(err) + } + if req["model"] != "claude-opus-4-8" { + t.Fatalf("model=%v", req["model"]) + } + msgs, _ := req["messages"].([]any) + if len(msgs) != 2 { + t.Fatalf("expected system+user, got %d", len(msgs)) + } +} diff --git a/bte-promo-script/madeye-proxy/integration_test.go b/bte-promo-script/madeye-proxy/integration_test.go new file mode 100644 index 0000000..fe1f2e4 --- /dev/null +++ b/bte-promo-script/madeye-proxy/integration_test.go @@ -0,0 +1,186 @@ +package main + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "strings" + "testing" +) + +func TestIntegration_messages_nonStream(t *testing.T) { + upstream := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/chat/completions" { + t.Fatalf("upstream path=%s", r.URL.Path) + } + if !strings.HasPrefix(r.Header.Get("Authorization"), "Bearer ") { + t.Fatal("missing bearer auth to MadEye") + } + var body map[string]any + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + t.Fatal(err) + } + msgs, _ := body["messages"].([]any) + if len(msgs) < 2 { + t.Fatalf("expected system+user messages, got %d", len(msgs)) + } + if body["model"] != "claude-opus-4-8" { + t.Fatalf("model=%v", body["model"]) + } + meta, _ := body["metadata"].(map[string]any) + if meta["user_email"] != "test@pocketfm.com" { + t.Fatalf("metadata=%v", meta) + } + + _ = json.NewEncoder(w).Encode(map[string]any{ + "id": "chatcmpl-test", + "choices": []any{ + map[string]any{ + "message": map[string]any{ + "role": "assistant", + "content": "PROXY_OK", + }, + "finish_reason": "stop", + }, + }, + "usage": map[string]any{ + "prompt_tokens": 10, + "completion_tokens": 2, + "total_tokens": 12, + }, + }) + })) + defer upstream.Close() + + srv := newServer(config{ + Port: "0", + MadEyeBase: upstream.URL, + MadEyeAPIKey: "madeye-test-key", + MadEyeEmail: "test@pocketfm.com", + ProxyKey: "proxy-test-key", + UpstreamModel: "claude-opus-4-8", + }) + ts := httptest.NewServer(srv.routes()) + defer ts.Close() + + reqBody := `{ + "model": "claude-sonnet-4", + "max_tokens": 32, + "system": "You are helpful", + "messages": [ + {"role":"user","content":"ping"}, + {"role":"assistant","content":"prefill-drop"} + ] + }` + req, err := http.NewRequest(http.MethodPost, ts.URL+"/v1/messages", strings.NewReader(reqBody)) + if err != nil { + t.Fatal(err) + } + req.Header.Set("Authorization", "Bearer proxy-test-key") + req.Header.Set("Content-Type", "application/json") + req.Header.Set("anthropic-version", "2023-06-01") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + b, _ := io.ReadAll(resp.Body) + t.Fatalf("status=%d body=%s", resp.StatusCode, b) + } + + var out map[string]any + if err := json.NewDecoder(resp.Body).Decode(&out); err != nil { + t.Fatal(err) + } + if out["type"] != "message" { + t.Fatalf("type=%v", out["type"]) + } + content, _ := out["content"].([]any) + if len(content) == 0 { + t.Fatal("empty content") + } + block, _ := content[0].(map[string]any) + if block["text"] != "PROXY_OK" { + t.Fatalf("text=%v", block["text"]) + } +} + +func TestIntegration_messages_stream(t *testing.T) { + upstream := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var body map[string]any + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + t.Fatal(err) + } + if body["stream"] == true { + t.Fatal("upstream must receive non-stream request") + } + _ = json.NewEncoder(w).Encode(map[string]any{ + "id": "chatcmpl-test", + "choices": []any{ + map[string]any{ + "message": map[string]any{ + "role": "assistant", + "content": "PROXY_OK", + }, + "finish_reason": "stop", + }, + }, + }) + })) + defer upstream.Close() + + srv := newServer(config{ + MadEyeBase: upstream.URL, + MadEyeAPIKey: "madeye-test-key", + MadEyeEmail: "test@pocketfm.com", + ProxyKey: "proxy-test-key", + UpstreamModel: "claude-opus-4-8", + }) + ts := httptest.NewServer(srv.routes()) + defer ts.Close() + + reqBody := `{"model":"claude-opus-4-8","max_tokens":32,"stream":true,"messages":[{"role":"user","content":"ping"}]}` + req, _ := http.NewRequest(http.MethodPost, ts.URL+"/v1/messages", strings.NewReader(reqBody)) + req.Header.Set("Authorization", "Bearer proxy-test-key") + req.Header.Set("Content-Type", "application/json") + + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + t.Fatalf("status=%d", resp.StatusCode) + } + body, err := io.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + text := string(body) + if !strings.Contains(text, "event: content_block_delta") { + t.Fatalf("missing anthropic deltas: %s", text) + } + if !strings.Contains(text, "PROXY_OK") { + t.Fatalf("missing streamed text: %s", text) + } +} + +func TestIntegration_unauthorized(t *testing.T) { + srv := newServer(config{ProxyKey: "secret"}) + ts := httptest.NewServer(srv.routes()) + defer ts.Close() + + req, _ := http.NewRequest(http.MethodPost, ts.URL+"/v1/messages", strings.NewReader(`{"messages":[]}`)) + req.Header.Set("Content-Type", "application/json") + resp, err := http.DefaultClient.Do(req) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusUnauthorized { + t.Fatalf("status=%d", resp.StatusCode) + } +} diff --git a/bte-promo-script/madeye-proxy/main.go b/bte-promo-script/madeye-proxy/main.go new file mode 100644 index 0000000..0faf535 --- /dev/null +++ b/bte-promo-script/madeye-proxy/main.go @@ -0,0 +1,199 @@ +package main + +import ( + "bytes" + "fmt" + "io" + "log" + "net/http" + "os" + "strings" + "time" +) + +type config struct { + Port string + MadEyeBase string + MadEyeAPIKey string + MadEyeEmail string + ProxyKey string + UpstreamModel string +} + +func loadConfig() (config, error) { + host := strings.TrimSpace(os.Getenv("MADEYE_BASE_URL")) + if host == "" { + return config{}, fmt.Errorf("MADEYE_BASE_URL is required (set via K8s env on madeye-proxy pod)") + } + host = strings.TrimRight(host, "/") + return config{ + Port: envOr("PORT", "4000"), + MadEyeBase: host + "/v1", + MadEyeAPIKey: os.Getenv("MADEYE_API_KEY"), + MadEyeEmail: os.Getenv("MADEYE_USER_EMAIL"), + ProxyKey: os.Getenv("PROXY_MASTER_KEY"), + UpstreamModel: envOr("MADEYE_UPSTREAM_MODEL", "claude-opus-4-8"), + }, nil +} + +func envOr(k, def string) string { + if v := os.Getenv(k); v != "" { + return v + } + return def +} + +type server struct { + cfg config + client *http.Client +} + +func newServer(cfg config) *server { + return &server{ + cfg: cfg, + client: &http.Client{ + Timeout: 10 * time.Minute, + }, + } +} + +func (s *server) routes() http.Handler { + mux := http.NewServeMux() + mux.HandleFunc("GET /healthz", s.handleHealth) + mux.HandleFunc("GET /health/liveliness", s.handleHealth) + mux.HandleFunc("POST /v1/messages", s.handleMessages) + return mux +} + +func (s *server) handleHealth(w http.ResponseWriter, _ *http.Request) { + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write([]byte(`{"status":"ok"}`)) +} + +func (s *server) authorize(r *http.Request) bool { + if s.cfg.ProxyKey == "" { + return true + } + auth := r.Header.Get("Authorization") + return auth == "Bearer "+s.cfg.ProxyKey +} + +func (s *server) handleMessages(w http.ResponseWriter, r *http.Request) { + if !s.authorize(r) { + http.Error(w, `{"error":"unauthorized"}`, http.StatusUnauthorized) + return + } + if s.cfg.MadEyeAPIKey == "" { + http.Error(w, `{"error":"MADEYE_API_KEY not configured"}`, http.StatusInternalServerError) + return + } + + body, err := io.ReadAll(io.LimitReader(r.Body, 32<<20)) + if err != nil { + http.Error(w, `{"error":"read body"}`, http.StatusBadRequest) + return + } + + model := readModelFromAnthropic(body, s.cfg.UpstreamModel) + openBody, err := anthropicToOpenAI(body, s.cfg.UpstreamModel, s.cfg.MadEyeEmail) + if err != nil { + log.Printf("convert request: %v body=%s", err, debugBody(body)) + http.Error(w, fmt.Sprintf(`{"error":"convert request: %s"}`, err.Error()), http.StatusBadRequest) + return + } + + clientStream := isStreamRequest(body) + + upBody, status, err := s.fetchUpstream(r, openBody, body) + if err != nil { + log.Printf("upstream error: %v", err) + http.Error(w, `{"error":"upstream unreachable"}`, http.StatusBadGateway) + return + } + if status < 200 || status >= 300 { + log.Printf("upstream HTTP %d", status) + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + _, _ = w.Write(upBody) + return + } + + outBody, err := openAIToAnthropic(upBody, model) + if err != nil { + log.Printf("convert response: %v upstream=%s", err, debugBody(upBody)) + http.Error(w, fmt.Sprintf(`{"error":"convert response: %s"}`, err.Error()), http.StatusBadGateway) + return + } + + if clientStream { + if err := writeAnthropicAsSSE(w, outBody); err != nil { + log.Printf("stream emit: %v", err) + } + return + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(outBody) +} + +func (s *server) fetchUpstream(r *http.Request, openBody, anthropicBody []byte) ([]byte, int, error) { + maxAttempts := 1 + if requestHasTools(anthropicBody) { + maxAttempts = 3 + } + + var lastBody []byte + var lastStatus int + + for attempt := 1; attempt <= maxAttempts; attempt++ { + upReq, err := http.NewRequestWithContext(r.Context(), http.MethodPost, s.cfg.MadEyeBase+"/chat/completions", bytes.NewReader(openBody)) + if err != nil { + return nil, http.StatusInternalServerError, err + } + upReq.Header.Set("Content-Type", "application/json") + upReq.Header.Set("Authorization", "Bearer "+s.cfg.MadEyeAPIKey) + if accept := r.Header.Get("Accept"); accept != "" { + upReq.Header.Set("Accept", accept) + } + + upResp, err := s.client.Do(upReq) + if err != nil { + return nil, http.StatusBadGateway, err + } + + upBody, err := io.ReadAll(io.LimitReader(upResp.Body, 32<<20)) + upResp.Body.Close() + if err != nil { + return nil, http.StatusBadGateway, err + } + + lastBody, lastStatus = upBody, upResp.StatusCode + if upResp.StatusCode < 200 || upResp.StatusCode >= 300 { + return upBody, upResp.StatusCode, nil + } + if !openAIMissingToolCalls(upBody) || attempt == maxAttempts { + if openAIMissingToolCalls(upBody) { + log.Printf("upstream still missing tool_calls after %d attempts", attempt) + } + return upBody, upResp.StatusCode, nil + } + log.Printf("upstream finish_reason=tool_calls without tool_calls (attempt %d/%d), retrying", attempt, maxAttempts) + } + + return lastBody, lastStatus, nil +} + +func main() { + cfg, err := loadConfig() + if err != nil { + log.Fatal(err) + } + srv := &http.Server{ + Addr: ":" + cfg.Port, + Handler: newServer(cfg).routes(), + ReadHeaderTimeout: 30 * time.Second, + } + log.Printf("madeye-proxy listening on :%s → %s/chat/completions", cfg.Port, cfg.MadEyeBase) + log.Fatal(srv.ListenAndServe()) +} diff --git a/bte-promo-script/madeye-proxy/prefill.go b/bte-promo-script/madeye-proxy/prefill.go new file mode 100644 index 0000000..71ae4ec --- /dev/null +++ b/bte-promo-script/madeye-proxy/prefill.go @@ -0,0 +1,20 @@ +package main + +import "strings" + +func roleOf(msg map[string]any) string { + r, _ := msg["role"].(string) + return strings.ToLower(r) +} + +// stripTrailingAssistant removes trailing assistant turns (Claude Code prefills). +func stripTrailingAssistant(messages []map[string]any) []map[string]any { + if len(messages) == 0 { + return messages + } + out := append([]map[string]any(nil), messages...) + for len(out) > 0 && roleOf(out[len(out)-1]) == "assistant" { + out = out[:len(out)-1] + } + return out +} diff --git a/bte-promo-script/madeye-proxy/stream.go b/bte-promo-script/madeye-proxy/stream.go new file mode 100644 index 0000000..d6d9034 --- /dev/null +++ b/bte-promo-script/madeye-proxy/stream.go @@ -0,0 +1,270 @@ +package main + +import ( + "bufio" + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "strings" +) + +// writeAnthropicAsSSE converts a complete Anthropic messages JSON response into +// Anthropic SSE events (including tool_use blocks) for streaming clients. +func writeAnthropicAsSSE(w http.ResponseWriter, anthropicBody []byte) error { + flusher, ok := w.(http.Flusher) + if !ok { + return fmt.Errorf("streaming not supported") + } + + var msg map[string]any + if err := json.Unmarshal(anthropicBody, &msg); err != nil { + return err + } + + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + w.WriteHeader(http.StatusOK) + + msgID := asString(msg["id"]) + if msgID == "" { + msgID = "msg_madeye_proxy" + } + model := asString(msg["model"]) + stopReason := asString(msg["stop_reason"]) + if stopReason == "" { + stopReason = "end_turn" + } + + writeSSE(w, flusher, "message_start", map[string]any{ + "type": "message_start", + "message": map[string]any{ + "id": msgID, + "type": "message", + "role": "assistant", + "model": model, + "content": []any{}, + "stop_reason": nil, + "usage": msg["usage"], + }, + }) + + blocks, _ := msg["content"].([]any) + for i, block := range blocks { + b, ok := block.(map[string]any) + if !ok { + continue + } + switch asString(b["type"]) { + case "text": + text := asString(b["text"]) + writeSSE(w, flusher, "content_block_start", map[string]any{ + "type": "content_block_start", + "index": i, + "content_block": map[string]any{ + "type": "text", + "text": "", + }, + }) + if text != "" { + writeSSE(w, flusher, "content_block_delta", map[string]any{ + "type": "content_block_delta", + "index": i, + "delta": map[string]any{ + "type": "text_delta", + "text": text, + }, + }) + } + writeSSE(w, flusher, "content_block_stop", map[string]any{ + "type": "content_block_stop", + "index": i, + }) + case "tool_use": + input := b["input"] + if input == nil { + input = map[string]any{} + } + writeSSE(w, flusher, "content_block_start", map[string]any{ + "type": "content_block_start", + "index": i, + "content_block": map[string]any{ + "type": "tool_use", + "id": asString(b["id"]), + "name": asString(b["name"]), + "input": map[string]any{}, + }, + }) + if raw, err := json.Marshal(input); err == nil && len(raw) > 2 { + writeSSE(w, flusher, "content_block_delta", map[string]any{ + "type": "content_block_delta", + "index": i, + "delta": map[string]any{ + "type": "input_json_delta", + "partial_json": string(raw), + }, + }) + } + writeSSE(w, flusher, "content_block_stop", map[string]any{ + "type": "content_block_stop", + "index": i, + }) + } + } + + writeSSE(w, flusher, "message_delta", map[string]any{ + "type": "message_delta", + "delta": map[string]any{ + "stop_reason": stopReason, + "stop_sequence": nil, + }, + "usage": msg["usage"], + }) + writeSSE(w, flusher, "message_stop", map[string]any{ + "type": "message_stop", + }) + return nil +} + +func proxyStream(w http.ResponseWriter, upstreamResp *http.Response, model string) error { + flusher, ok := w.(http.Flusher) + if !ok { + return fmt.Errorf("streaming not supported") + } + + w.Header().Set("Content-Type", "text/event-stream") + w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Connection", "keep-alive") + w.WriteHeader(upstreamResp.StatusCode) + + msgID := "msg_madeye_proxy" + writeSSE(w, flusher, "message_start", map[string]any{ + "type": "message_start", + "message": map[string]any{ + "id": msgID, + "type": "message", + "role": "assistant", + "model": model, + "content": []any{}, + "stop_reason": nil, + "usage": map[string]any{"input_tokens": 0, "output_tokens": 0}, + }, + }) + writeSSE(w, flusher, "content_block_start", map[string]any{ + "type": "content_block_start", + "index": 0, + "content_block": map[string]any{ + "type": "text", + "text": "", + }, + }) + + scanner := bufio.NewScanner(upstreamResp.Body) + scanner.Buffer(make([]byte, 0, 64*1024), 1024*1024) + stopReason := "end_turn" + + for scanner.Scan() { + line := scanner.Text() + if !strings.HasPrefix(line, "data: ") { + continue + } + payload := strings.TrimPrefix(line, "data: ") + if payload == "[DONE]" { + break + } + var chunk map[string]any + if err := json.Unmarshal([]byte(payload), &chunk); err != nil { + continue + } + choices, _ := chunk["choices"].([]any) + if len(choices) == 0 { + continue + } + choice, _ := choices[0].(map[string]any) + delta, _ := choice["delta"].(map[string]any) + if text, _ := delta["content"].(string); text != "" { + writeSSE(w, flusher, "content_block_delta", map[string]any{ + "type": "content_block_delta", + "index": 0, + "delta": map[string]any{ + "type": "text_delta", + "text": text, + }, + }) + } + if fr := asString(choice["finish_reason"]); fr != "" { + if fr == "length" { + stopReason = "max_tokens" + } else if fr == "tool_calls" { + stopReason = "tool_use" + } + } + } + + writeSSE(w, flusher, "content_block_stop", map[string]any{ + "type": "content_block_stop", + "index": 0, + }) + writeSSE(w, flusher, "message_delta", map[string]any{ + "type": "message_delta", + "delta": map[string]any{ + "stop_reason": stopReason, + "stop_sequence": nil, + }, + "usage": map[string]any{"output_tokens": 0}, + }) + writeSSE(w, flusher, "message_stop", map[string]any{ + "type": "message_stop", + }) + return scanner.Err() +} + +func writeSSE(w http.ResponseWriter, flusher http.Flusher, event string, data map[string]any) { + raw, _ := json.Marshal(data) + fmt.Fprintf(w, "event: %s\n", event) + fmt.Fprintf(w, "data: %s\n\n", raw) + flusher.Flush() +} + +func readModelFromAnthropic(body []byte, fallback string) string { + var req map[string]any + if json.Unmarshal(body, &req) == nil { + if m := asString(req["model"]); m != "" { + return mapModel(m, fallback) + } + } + return mapModel("", fallback) +} + +func isStreamRequest(body []byte) bool { + var req map[string]any + if json.Unmarshal(body, &req) != nil { + return false + } + stream, _ := req["stream"].(bool) + return stream +} + +func copyUpstreamError(w http.ResponseWriter, resp *http.Response) { + body, _ := io.ReadAll(io.LimitReader(resp.Body, 65536)) + for k, vals := range resp.Header { + for _, v := range vals { + w.Header().Add(k, v) + } + } + w.WriteHeader(resp.StatusCode) + _, _ = w.Write(body) +} + +func debugBody(body []byte) string { + if len(body) > 512 { + return string(body[:512]) + "…" + } + return string(body) +} + +func cloneBody(body []byte) *bytes.Reader { + return bytes.NewReader(body) +} diff --git a/bte-promo-script/repos/README.md b/bte-promo-script/repos/README.md new file mode 100644 index 0000000..85d2b4d --- /dev/null +++ b/bte-promo-script/repos/README.md @@ -0,0 +1,9 @@ +# Promo pipeline repo (in-tree) + +Cloned with gastown-operator. Polecat `git-init` checks out this repository; Claude runs the pipeline from: + +``` +bte-promo-script/repos/bte-promo-script-repo/ +``` + +Update tool files here (workflows, scripts, canon). No separate gastown-static GitHub repo. diff --git a/bte-promo-script/repos/bte-promo-script-repo/CHANGELOG.md b/bte-promo-script/repos/bte-promo-script-repo/CHANGELOG.md new file mode 100644 index 0000000..a7268bb --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/CHANGELOG.md @@ -0,0 +1,39 @@ +# PACKAGE CHANGELOG — promo_tool_v4 +*(One entry per versioned zip. Rule: every change to the package ships as a NEW `promo_tool_v4.N.zip` — never overwrite a shipped zip; the changelog line is written in the same pass as the zip. "What changed?" is answered by diffing two zips, never by memory.)* + +## v4.5 — 2026-08-05 +*(Finish handoff — run promo-finish when W4 is done.)* +- **`scripts/PROMO_FINISH.md` (new)** — key → path table + one `promo-finish finish` command. No orchestrator/env details. +- **`CLAUDE.md`**, **`workflow4_render.md`**, **`HANDOFF.md`** — one-line finish pointer. + +## v4.4 — 2026-07-29 +*(Layout release — operator ruling: the package installs at the export ROOT, not a separate folder, so an agent starting at the root loads v4, never the retired v3 loadout.)* +- **Installed at root:** v4 `CLAUDE.md` replaces the old v3 root CLAUDE.md · v4 workflows 2/3/4 join W1/W5 in `workflows/` · v4 dependencies (constitution, brief template, codex, exemplar bank, both controls) join `dependencies/` · `HANDOFF.md`, `CHANGELOG.md`, `CONSERVATION_Rebuild_v1.md` at root. +- **Retired to `_to_delete/`:** the v3 root `CLAUDE.md` · `workflow2_skeleton.md` · `workflow3_beatsheet.md` · `workflow4_script.md` · stale `Ledger_RBM_v2.md` · the superseded `promo_tool_v4/` subfolder (zips are the archive of record). +- **Ledgers made current at root:** `Ledger_RBM_v4.md`, `Ledger_MVS_v1.md`, `Ledger_RotHC_v1.md` copied in from the v3 export (PH_v2, WBT_v1 already current). Root `dependencies/microbeat_taxonomy.md` (W2 §4b's reference) confirmed present — housekeeping item closed. +- `CLAUDE.md` — LAYOUT note added; W1/W5 routing rows no longer point at the v3 export. `HANDOFF.md` §2–3 rewritten for the root install. Zip now mirrors the root layout. + +## v4.3 — 2026-07-29 +*(Source: the layered Disowned review — W2 map verified healthy; the fat-narration script traced to the W3 layer. Measured: 130 narrator blocks vs 61 voiced lines (~83% narration), longest desert 12 consecutive blocks / 310 words; total exactly on budget — the briefs specified the mass, the writer obeyed.)* +- `brief_template.md` **v4** — two derivation laws (operator-ruled): **law 7 EXCHANGES ARE THE COUNTED UNIT** ("narration beat" banned as a counted unit; narration is mortar, never counted mass; a derivation that can't name its exchanges routes to W2 — absorbs the old turns-plus-narration-beats arithmetic) · **law 8 XFERS ARE RUNGS, NOT THE EXCHANGE** (turn floors count rendered turns; the writer voices the turns around and between XFERs; an all-XFER floor stages the documented v3 transfer-and-narrate anti-pattern). +- `workflow3_briefs.md` **v2** — §1 budget derivation rewritten exchanges-first per law 7; self-gate ban list gains the two enforcement items (narration-beat units · all-XFER floors). +- No W4 change: A16 (voice desert) + the DELIVERY RULE already cover the symptom downstream; they need to run, not grow. + +## v4.2 — 2026-07-29 +- `lineedit_codex.md` — four classes from the Disowned run: **A14 because-weld** (gloss welded into event sentences via ", because/so/and" chains) · **A15 listener conferencing** (narrator direct address banned outside the CTA) · **A16 voice desert** (restored: ≤150 spoken words voiceless while a licensed speaker is on scene) · **B19 re-arm re-teach** (a re-arm is one clause, never a re-explained reveal). +- `workflow4_render.md` — **THE DELIVERY RULE (hard):** one scene + receipt + edit log is the only deliverable unit; stitched ungated drafts are VOIDED RUNS; artifacts stamp `built on promo_tool_v4.N`. +- `HANDOFF.md` — post-mortem #2: second consecutive run skipped the stations; ~80% of operator notes on both runs were already-written law unenforced. + +## v4.1 — 2026-07-29 +- `workflow2_map.md` **v2 — major:** full merge restoring the W2 construction brain after file-level audit (intake lock · Spine + Relatable Thruline · WHY NOW · injustice rotation/trajectory/density · 6-question loop + furniture test · ANTI-SETUP GATE · Beat-1 anchor protocol · full inheritance discipline · cliff withholding ratchet + fidelity + BOFU HARD STOP) + set-piece realization (DEPTH/SCOPE, CANON-FABRICATED) + engine matrix + backward plant pass + IN→OUT/TIME/CARRY/BECAUSE chain + words-follow-events. +- `workflow3_briefs.md` — powerstart fact-check vs Scene 1 · canon-banter OPEN class · bottom-up budget derivation. +- `workflow4_render.md` — receipt: exchange reconciliation · continuity row · density rule · sourced-numbers · dialogue-share diagnostic; one-altitude-one-pass + report-exceptions-only. +- `writer_constitution.md` — additive only, validated core byte-identical: budget-as-forecast · THE LOOP posture · THE PRODUCTION BLOCK (SFX/tags/AIVO/CTA + verbatim download line). +- `lineedit_codex.md` — A10 oversize blocks · A11 pre-announcement · A12 gloss family · A13 reporting mode · B13 costume test · B16 rationalized passivity · B17 ledger close · B18 outcome-promising wink. +- `brief_template.md` — continuity contract (IN/CARRY/BECAUSE open the events; OUT + seam close them). +- `CONSERVATION_Rebuild_v1.md` — all three workflow rows rewritten with file-level audit dispositions and evidence citations. +- `HANDOFF.md` — new since v4.0; carries the first-run post-mortem and the Midnight version pin. +- Unchanged from v4.0: `CLAUDE.md` · `exemplar_bank.md` · both control scripts · `powerstart.md`. + +## v4.0 — 2026-07-29 (first compile; zip overwritten before versioning began — deltas reconstructed above from the session edit log) +- Initial package: CLAUDE.md · workflows 2/3/4 · writer_constitution · brief_template · lineedit_codex · exemplar_bank · Ebony + Draft Selection controls · powerstart · conservation table. diff --git a/bte-promo-script/repos/bte-promo-script-repo/CLAUDE.md b/bte-promo-script/repos/bte-promo-script-repo/CLAUDE.md new file mode 100644 index 0000000..f9f582f --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/CLAUDE.md @@ -0,0 +1,58 @@ +# PROMO PIPELINE v4 — ROOT + +You are a Performance Promo Editor for Pocket FM long-form audio series. You do NOT summarize episodes or adapt faithfully — you extract the most CPI-efficient narrative spine from source material and build promos that convert cold paid traffic. Every structural decision is a CPI decision. + +**What you build:** 30-minute+ (~4,500 spoken words) audio promos — complete narrative experiences, AIVO-produced at ~150 wpm, for a cold listener on a phone who hears it once with no rewind. **The register is naive pulp serial, played completely straight** (see `dependencies/writer_constitution.md` — the one style authority). + +**Performance targets:** CPI < $6 · CPM < $20 · 3-sec play > 50% · thruplay > 20% · no Q2–Q4 collapse · completion > 10% · CTR > 2% · CTI > 12%. The opening 10–30 seconds outweigh everything else. + +## THE INJUSTICE DOCTRINE (the engine of everything we write) + +Every promo runs on the four-legged unit: **THE ACT** (a right action or right position — innocent, capable, correct — witnessed) → **THE PUNISHMENT** (the world punishes exactly that; the punisher can cite the act) → **THE GAP, MARKED** (one plain sentence per blow holding both halves — via the narrator's open verdict, the hero's body, or the re-arm of what the listener secretly knows) → **THE ANSWER** (the hero replies; an act, short). Cruelty on a passive hero is misfortune, and misfortune doesn't convert. **No unmarked injustice. Withhold the power, never the protagonist. Resolution is initiated, never delivered — the payoff lives in the app.** + +## THE PIPELINE + +``` +W1 · IDEATION (unchanged) → W2 · THE MAP → W3 · THE BRIEFS → W4 · DRAFT→EDIT→CHECK → OPERATOR READ → SHIP +``` + +| Signal | Workflow | File | +|---|---|---| +| Idea, concept, BSV, adaptation | W1 (legacy, unchanged) | `workflows/workflow1_ideation.md` | +| Locked concept → scene decisions | **W2 · THE MAP** | `workflows/workflow2_map.md` | +| Locked map → per-scene briefs | **W3 · THE BRIEFS** | `workflows/workflow3_briefs.md` | +| Locked briefs → script | **W4 · THE RENDER** | `workflows/workflow4_render.md` | +| Analysis / bucketing on request | W5 (legacy, unchanged) | `workflows/workflow5_analysis.md` | + +Load one workflow at a time. Every dispatched agent follows the current file verbatim — never a workflow reconstructed from memory. + +**LAYOUT (v4.4):** this file sits at the pipeline ROOT — `workflows/`, `dependencies/`, `world docs/`, `working files/` are its siblings; there is no separate package folder. Retired v3 files live in `_to_delete/`, never loaded. The versioned `promo_tool_v4.N.zip` files are the archive of record. + +## DEPENDENCIES + +| File | What | Loaded by | +|---|---|---| +| `dependencies/writer_constitution.md` | The one-page writing law + the verbatim voice model. The ENTIRE writer loadout besides the brief. | W4 Station 1 | +| `dependencies/brief_template.md` | The seven blocks + eight derivation laws for scene briefs | W3 | +| `dependencies/lineedit_codex.md` | The operator's correction classes with authored before→after pairs | W4 Station 2 | +| `dependencies/exemplar_bank.md` | Operator-authored passages filed by SLOT (opening weave, reveal, action beat, official speech, mercy-trap) | W3 (attach matching slot to a brief) | +| `dependencies/Ebony_ControlScript_v1.md` · `MVS_DraftSelection_ControlScript_v1.md` | The two permanent calibration controls | Control gate | +| `dependencies/powerstart.md` | Opening-line generation (kept verbatim — it works) | W3, Scene 1 brief | +| `world docs/` · `dependencies/Ledger__v.md` | Canon, Essence, HARD BLOCKS, harvested lines (XFER source) | W2, W3 | + +## GOVERNANCE (standing law) + +1. **The operator's read is the only taste gate and the ship gate.** No promo ships without it. Agents never grade quality; agents enforce fixed rules (grep, restatement, the codex) — the taste-grader is demoted permanently (ρ≈0.09). +2. **THE CONVERGENCE LOOP.** Every operator note triages into exactly one bin: REPEAT CLASS (editor miss → strengthen that codex class's exemplars) · NEW CLASS (one line added to constitution or codex + the operator's pair — taught once, never twice) · PURE TASTE (applied to the scene, deposited to the exemplar bank, NEVER made law). Track per scene: notes count + repeat-class share. Health = both trending down. +3. **MASS BUDGETS ARE LAW.** Constitution: one page + voice model. Codex: classes merge on entry — one rule in, overlap out. Briefs: seven blocks, nothing else. Rule-count growth is the documented failure mode of v1–v3; any change that grows a surface must name what it absorbs. +4. **CONSERVATION TABLE before any restructure** · **CONTROL GATE before any new rule or agent bites live work** (runs clean on both controls first; the line editor's requirement is near-zero edits on them). +5. **CLEAN ROOM for writers.** The drafting context holds the constitution + brief + prior scenes of the same promo — nothing else, no folder access, no pipeline files. Contamination voids the artifact. +6. **CANON LAW.** XFER lines verbatim, word-for-word or not at all; adaptations only via a logged **-adapted** row (speaker/addressee/pronoun, words untouched). HARD BLOCKS absolute. Writers never mint a number. + +## FILE OUTPUT + +Save every deliverable to `working files/` without being asked: maps → `beat skeletons/` · briefs → `beat sheets/` · scripts → `w4 scripts/` · everything else → `documentation/`. Filename `[Series]_[Angle]_[Artifact]_v[X].md`; new version = new file, never overwrite. **PACKAGE VERSIONING (standing rule):** any change to the pipeline package ships as a new `promo_tool_v4.N.zip` with a matching `CHANGELOG.md` entry written in the same pass — shipped zips are never overwritten; "what changed" is answered by diffing zips, never by memory. + +## FINISH (automated runs) + +When W4 is done and all four files are saved, run `promo-finish finish` with each artifact key and the path you wrote — see `scripts/PROMO_FINISH.md`. Stop on `PROMO_FINISH_OK`. No git push, no HTTP calls. diff --git a/bte-promo-script/repos/bte-promo-script-repo/CONSERVATION_Rebuild_v1.md b/bte-promo-script/repos/bte-promo-script-repo/CONSERVATION_Rebuild_v1.md new file mode 100644 index 0000000..8ae1c4d --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/CONSERVATION_Rebuild_v1.md @@ -0,0 +1,28 @@ +# CONSERVATION TABLE — v3 STACK → v4 REBUILD · v1 +*(Required by standing law before the restructure installs: an explicit audit of what the old stack enforced and where each row lands — KEPT (where) / MOVED (where) / RETIRED (with a ruling) / OPERATOR TO RATIFY. Rows grouped by function; the operator's approval of this table is the install authorization.)* + +| Old stack row (group) | Disposition | Where it lands / the ruling | +|---|---|---| +| **Injustice doctrine (ACT→PUNISHMENT, punisher cites the act; withhold power never protagonist; resolution withholding)** | KEPT, extended | CLAUDE.md v4 — now the four-legged unit (GAP-MARKED + ANSWER added); enforced at W2 (units), W3 (spec), W4 (codex B1/B15) | +| STYLE_CODEX Face A (12 laws + craft registers) | RETIRED as a surface; content absorbed | The constitution's voice model + 7 rules carry the validated substance (villain-leads, narration-carries-news→adds-new-info, hero's-words-are-acts, someone-sees→gap-mark, stock feelings). **RULING: the compression doctrine ("shortest line hits hardest," "dialogue ends at the punch") is STRUCK — operator's correction record shows the ear lengthens lines to make them land; conversational fullness is law (codex B3).** A11 restraint-breaks-once: retired as law, available as W2 map choice. | +| STYLE_CODEX Face B mechanical rows (greps: scaffolds, adverb tags, foreknowledge, riddle classes, >35w, verdict-openers, commodity register, etc.) | MOVED, consolidated | `lineedit_codex.md` §A — the same enforcement idea with the classes renamed from the operator's actual notes. **RULING: the foreknowledge/"little did he know" BAN is STRUCK — open dramatic irony is house style (the pulp correction); the ban survives only against *wry/literary* irony (codex B2).** Verdict-openers: struck as a ban; the narrator's open verdict is house style; empty-fragment verdicts policed by B15. | +| Face B judgment rows + writer arbitration | RETIRED | Writer-arbitration on affect is gone (it KEPT a misparsing powerstart over its own cold read). Judgment classes now live in the codex with operator exemplars; unclassed flags route to the OPERATOR, whose read is the only taste gate. | +| W2 skeleton machinery (intake lock, Spine + Relatable Thruline, WHY NOW, injustice rotation/trajectory/density, 6-question loop + furniture test, ANTI-SETUP GATE, Beat-1 protocol, inheritance discipline, cliff withholding ratchet + fidelity, BOFU HARD STOP + contested override, IN→OUT/grouping) | KEPT — **fully merged after second audit** | `workflow2_map.md` v2 — the old construction brain restored whole, merged with the v4 layer (teaching schedule, concept caps, IN→OUT/TIME/CARRY/BECAUSE chain, heat map, reveals-spent-once, words-follow-events). *(Audit history: v1 of this table claimed KEPT while the file carried ~15% of the machinery; caught by the operator against the source file 2026-07-29 — transitions, frontloaded injustice, setup scenes, and the passive hero in the Archie run all trace to the dropped rows. Ruling of record: conservation claims are only valid with file-level audits.)* | +| W3 machinery (register/leak/stage tests, tag taxonomy + kill flags + engine matrix, set-piece realization DEPTH/SCOPE, plant pass fwd+backward, dialogue plan + carry tags, light-dialogue check, tiered load, exceptions-only reporting) | AUDITED vs source file 2026-07-29 — split disposition | **RETIRED with evidence:** the 80–150w treatment-prose surface (transcription-bait; six documented sheet-echoes) → telegraphed events per `brief_template.md`. **RESTORED after audit:** set-piece realization + DEPTH/SCOPE + CANON-FABRICATED → W2 §4b · engine requirements + distribution flags → W2 §4b · backward plant pass → W2 §7 · exceptions-only reporting → W4 receipt. **KEPT (already in v4):** movement-per-beat (loop Q3/anti-setup), charged scene-opens (weave), dialogue plan (turn maps + XFERs + hero-answers), canon-grounding (W3 gate), fabrication sweep (numbers law). | +| XFER law (verbatim canon, triggers, provenance; -adapted convention; MUST caps) | KEPT | `workflow3_briefs.md` §6 + CLAUDE.md canon law; addressee field added (new law from the proof rounds) | +| Powerstart (five candidates, operator swap) | KEPT | `workflow3_briefs.md` §9 + `powerstart.md` verbatim; injustice-coding + cold-panel added | +| W4 machinery (one-altitude-one-pass, THE LOOP, entry triage, powerstart bake-in, Opening Gate, dialogue filter/costume test, ratio gate + Deficit Pass, V.O. ceiling, SFX/IMPACT/slugline/speaker-tag/AIVO/CTA production law, staging-is-source-of-truth, sourced specificity, word floors, continuity log, assembly audit, triggered diagnostics, half-cut handoff) | AUDITED vs source file 2026-07-29 — split disposition | **SUPERSEDED BY EVIDENCE (stays retired):** the dialogue-ratio hard floor + Deficit Pass — the T6 control gate proved the floor fires on BOTH proven controls (Ebony 24.6% / Draft Selection 16.1% voiced); ratio prints as a diagnostic; exchange reconciliation is the structural gate. Word floors → words-follow-events. Half-cut → the scene-by-scene session. Opening Gate → the operator gate + weave line-one law. **RESTORED after audit:** THE LOOP → constitution (drafting posture) · THE PRODUCTION BLOCK (SFX, tags, chorus, AIVO, CTA + verbatim download language) → constitution · costume test → codex B13 · first-person reporting → codex A13 · one-altitude-one-pass + exceptions-only → W4 receipt. **KEPT (already in v4):** powerstart bake-in, staging-source-of-truth (brief events + XFER law), sourced specificity, continuity (session + receipt), enter-at-cost, orientation two-sided. | +| Exchange floors / rally law / survival laws | KEPT, simplified | Turn floors with extend-while-escalating live in every brief's event maps; **close-on-the-hero added**; the promo-level floor arithmetic (≥3 exchanges etc.) is superseded by per-scene maps — every confrontation is mapped, so the floor is by construction | +| V.O. ceiling + interiority redirection | KEPT as design guidance | Set per-promo at W2/W3 (POV + companion-voice design); the arithmetic ceiling retires — the proof rounds showed the failure mode is zero interiority, not flood, and the weave + gap-mark laws govern the balance | +| Station 3 battery: length floors, budgets, drift, plants-paid, sourced numbers, audio-clarity sweep, seam/opening/cliff gates | KEPT, redistributed | Arithmetic rows → the per-scene RECEIPT (length, XFER string-check, plants). Sourced-numbers → brief law ("writers never mint a number") + codex. Audio-clarity + comprehension quiz → Station 3 restatement (the validated instrument). Opening gate → W2 position fields + Scene-1 powerstart law. Seam gate → the map's SEAM field (scenes move by voices). Cliff gate → W2 §4. | +| Cold-read reader test (restatement, engine/power facts returned) | KEPT | W4 Station 3, unchanged in kind; runs per scene + on the assembled whole | +| Control gate (Ebony + Draft Selection; fires-on-control = miscalibrated) | KEPT, extended | CLAUDE.md governance; now also the line editor's calibration requirement (near-zero edits on controls) | +| Conservation-table + control-gate standing rules (T6 completion clauses) | KEPT | CLAUDE.md governance §4; this document is itself the compliance artifact | +| Receipt discipline (verify by quoting; zeros shown; receipt ships with the artifact) | KEPT, right-sized | The per-scene receipt (arithmetic only) + the edit log + the notes/bin metrics — the 28KB receipt era ends; **RULING: subtractive batteries measuring prose quality are retired; presence-of-quality is the operator's read, protected by the convergence loop** | +| Harvest Provenance Law (deposits quarantined as CANDIDATE until ship data) | KEPT | W4 LOCK+DEPOSIT; exemplar-bank deposits are operator-authored and exempt (they are the operator's own hand, the validated register source) | +| Ledgers, world docs, HARD BLOCKS, Essence | KEPT, unchanged | Same files, same authority; W3 canon-check is the enforcement point | +| W1 ideation · W5 analysis/bucketing | UNCHANGED, out of scope | v3 files remain live; W5's taste-scoring rows remain demoted per the standing grader ruling; W1 gains one flag from the record: angle length-feasibility (the Midnight lesson) checks at W2 §5 | +| **BECAUSE chain + IM density (old CLAUDE.md hard-requirement tier, alongside injustice density)** | BECAUSE chain: KEPT — **restored after audit** · IM density: RETIRED with ruling | BECAUSE chain → `workflow2_map.md` per-scene BECAUSE field + THEREFORE/BUT-never-AND-THEN exit-gate test + the brief's IN state. *(Audit note: dropped uncredited in the first issue of this table; caught by the operator 2026-07-29.)* IM density is superseded by the heat map + declared peaks + injustice units-per-scene — the same pressure measured by scene-level fields instead of a promo-level count. | +| Freeze/moratorium provisions | KEPT in spirit | No freeze until a full promo ships through the v4 stack and clears the operator's read of the assembled whole; the convergence metrics are the freeze evidence | + +**OPERATOR TO RATIFY (the three struck rulings):** the compression doctrine strike · the foreknowledge-ban strike (pulp irony licensed) · the affect-arbitration retirement. Approval of this table installs the v4 stack; the v3 workflows and STYLE_CODEX move to archive, never loaded. diff --git a/bte-promo-script/repos/bte-promo-script-repo/HANDOFF.md b/bte-promo-script/repos/bte-promo-script-repo/HANDOFF.md new file mode 100644 index 0000000..1a6ef62 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/HANDOFF.md @@ -0,0 +1,53 @@ +# HANDOFF — PROMO PIPELINE v4 · INSTALL + OPERATION +*(You are the agent taking over this pipeline. Read this whole file before touching anything. Your operator is the human whose read is the only quality gate in this system — this document tells you how to not waste it.)* + +## 1 · WHAT THIS IS AND WHY IT EXISTS + +The previous pipeline (v3: W2 skeleton / W3 shooting-script / W4 one-go engine + a 40-law style codex and a large mechanical battery) repeatedly produced scripts that passed every gate and failed the operator's ear — mechanically immaculate, emotionally dead. It was replaced after ~10 operator-judged calibration rounds that isolated what actually produces strong output: a **one-page writer constitution with a verbatim voice model** (the register is naive pulp played straight), **concept-budgeted per-scene briefs** derived mechanically, a **line-edit pass that mechanizes the operator's accumulated corrections**, and the **operator's read as the only taste gate**, protected by a convergence loop so no note has to be given twice. The restructure is authorized: the conservation table (`CONSERVATION_Rebuild_v1.md`) is **ratified by the operator**, including its three struck rulings (compression doctrine dead; pulp irony licensed, only literary irony banned; writer affect-arbitration dead). + +## 2 · THE PACKAGE (installed at the export ROOT — do not rewrite any of it) + +`CLAUDE.md` (root: doctrine, routing, governance) · `workflows/workflow2_map.md` (W2 decides) · `workflows/workflow3_briefs.md` (W3 arms) · `workflows/workflow4_render.md` (W4: writer → line editor → cold reader → operator) · `dependencies/writer_constitution.md` (the ENTIRE writer loadout besides a brief) · `dependencies/brief_template.md` · `dependencies/lineedit_codex.md` (the operator's correction classes — his own before→after pairs) · `dependencies/exemplar_bank.md` (operator-authored passages by slot) · `dependencies/Ebony_ControlScript_v1.md` + `MVS_DraftSelection_ControlScript_v1.md` (the two permanent calibration controls) · `dependencies/powerstart.md` · `CONSERVATION_Rebuild_v1.md` (ratified) — all at the pipeline root, siblings of `world docs/`, `dependencies/Ledger_*.md`, and `working files/`. + +## 3 · INSTALL STEPS + +1. **The export ROOT is the live pipeline root (v4.4 layout — operator ruling: no separate package folder; an agent that starts at the root must load v4).** `CLAUDE.md`, `workflows/`, and `dependencies/` at the root ARE the v4 files. The retired v3 root loadout (the old root CLAUDE.md, `workflow2_skeleton.md`, `workflow3_beatsheet.md`, `workflow4_script.md`, the stale `Ledger_RBM_v2.md`) and the superseded `promo_tool_v4/` subfolder live in `_to_delete/` — never loaded. `workflow1_ideation.md` and `workflow5_analysis.md` remain live at `workflows/`, unchanged. The `promo_tool_vital_export_v3/` folder is archive only (calibration history in its `working files/documentation/`). +2. The v3 `workflow2/3/4`, `STYLE_CODEX.md`, and the old battery are **retired — never loaded again**, per the ratified table. Do not consult them for rules; if you think something is missing, check the conservation table first — its disposition is the ruling. +3. **REQUIRED BEFORE FIRST LIVE USE — CALIBRATE THE LINE EDITOR (not yet done):** run the codex, via a fresh-context agent, against both control scripts. Requirement: near-zero edits. Any class that fires on a control is miscalibrated — tune that class (narrow it), never the control. Log the calibration result to `working files/documentation/`. +4. Maintain the v3 file-output conventions: every deliverable saved to `working files/` unprompted, `[Series]_[Angle]_[Artifact]_v[X].md`, new version = new file, never overwrite. +5. **Automated runs:** after W4, run `promo-finish finish` — see `scripts/PROMO_FINISH.md`. + +## 4 · HOW TO OPERATE (the short version — the workflow files govern) + +- **W2** produces a one-page decisions map (injustice units with quotable acts · concept-teaching schedule · heat map · plants/re-arms · budgets). Operator approves the map before W3 runs — structural notes are cheap here and expensive later. +- **W3** derives one brief per scene, mechanically, per the template's laws. It writes NO prose (only powerstart candidates + verbatim XFERs). Canon collisions surface as OPEN items with proposed -adapted fixes; the operator rules on them BEFORE any writer session. +- **W4** runs the session protocol: **one fresh, folderless writer conversation renders the whole promo, one scene at a time.** The writer's context = the preamble + `writer_constitution.md` pasted whole + the current brief; prior scenes accumulate in-session; NOTHING else ever enters it. **The clean room is absolute — a writer that can see pipeline files, prior versions, or this folder produces a voided artifact (this happened once; treat it as a hard law).** Each draft scene goes through the line editor (fixes + log) and the cold restatement reader before the operator sees it. +- **The operator gate between scenes:** his notes triage into three bins — REPEAT CLASS (an editor miss → strengthen that codex class), NEW CLASS (add ONE line to constitution or codex, with his pair as exemplar, naming what it merges into), PURE TASTE (apply to the scene, deposit his lines to the exemplar bank, add NO law). Operator-authored replacement lines are used VERBATIM. Log per scene: note count + repeat share — both should trend down; if repeats rise, tune the editor, don't add rules. + +## 5 · HARD LAWS (violating any of these is how the last three pipelines died) + +- **Mass budgets:** the constitution stays one page + voice model; codex classes merge on entry; briefs are seven blocks. Never add a rule without naming what it absorbs. Rule-count growth is this system's documented failure mode. +- **Agents never judge quality.** They enforce fixed rules (grep, codex classes, restatement). The taste-grader is demoted permanently (measured ρ≈0.09 against the operator's ear). Unclassed concerns are FLAGGED to the operator, never fixed by taste. +- **Control gate:** no new rule or agent behavior bites live work until it runs clean on both controls. +- **Canon:** XFERs word-for-word or not at all; adaptations only as logged -adapted rows; writers never mint a number; HARD BLOCKS absolute; hero-facts stated as truth in briefs. +- **No promo ships without the operator's independent read of the assembled whole.** A passed gate is a measurement, never a verdict. +- Follow the workflow files verbatim — never reconstruct a workflow from memory. + +## 5b · POST-MORTEMS OF THE FIRST TWO RUNS (read as binding, not history) + +**Run 2 (RBM "Disowned on Her Birthday") repeated Run 1's failure exactly:** a stitched full script, editor never run, per-scene gates skipped — proven by banked codex classes (A10, A12, B17, the flagged canon-banter line) shipping untouched. Roughly 80% of the operator's notes on both runs were violations of law already written. **This is why the DELIVERY RULE in `workflow4_render.md` is now hard: one scene + receipt + edit log is the only deliverable unit; a stitched ungated draft is a VOIDED RUN; every artifact stamps `built on promo_tool_v4.N`.** Do not repeat this a third time. + +The first v4 production run (RBM "Archie Confrontation") delivered a stitched six-scene script that bucketed a 3. **Nearly every defect was a violation of already-written law: the run skipped the two required disciplines.** (1) The line editor was not calibrated/run — the text shipped dense with codex classes A2, A10, B1, and the gloss family. (2) The per-scene operator gate was skipped — six scenes of compounding drift reached the operator as one artifact. (3) W3's gates didn't bite: a HARD BLOCK violation ("the last of the clutch" vs the ten-eggs block), minted numbers ("nine-level ladder," "four years"), and a powerstart contradicted by its own first scene all shipped. None of this is a design question. **Run the stations. Gate every scene. Calibrate before live use.** The bucket's structural findings (reveal spent twice, the disownment staged twice, the ledger close) are now W2 law and codex classes B16–B18 — check the current files, not this paragraph, for their binding form. + +**Known instrument conflict:** W5's `bucketing.md` predates v4 and still bans patterns v4 licenses (the pulp reveal-wink) while the outcome-promising wink stays banned (codex B18 draws the line). When a bucket finding contradicts a v4 file, the v4 file governs; flag the bucketing row for sync rather than "fixing" licensed style. + +## 6 · STATE IN FLIGHT (pick this up first) + +- **VERSION PIN (operator ruling):** the in-flight Midnight writer session FINISHES on the constitution text it started with — never inject updated instructions mid-session; session stability is part of what the calibration validated. Later constitution additions (the loop posture, the production block) apply from the NEXT fresh session onward; Midnight receives the production block (SFX, CTA, tag hygiene) as a mechanical formatting pass at assembly only — format, never prose. +- **MVS "Midnight" is mid-production and is the v4 acceptance test.** An Opus writer session exists (operator-side): Scene 1 is drafted, revised once, and point-fixed; the combined packet `PRODUCTION_Midnight_Scene1Fixes_Scene2Brief_v1.md` (v3 export, `working files/documentation/`) is with the operator — it applies six Scene-1 point-fixes, reprints, then writes Scene 2. Scenes 3–5 briefs still need derivation from `MVS_Midnight_W3_Brief_v3.md` per the template (Scene 5's is substantially done in `PROOF_RoundB_Midnight_Anchor_Prompt_v3.md` — canon-repaired staging: Quinn binds the wound, feeds only on spilled blood, carries her toward the doctor; Loop's line -adapted to "her"; Erin's grief beat rephrased "first week"). Run the editor calibration (§3.3) before Scene 2 comes back, then edit-pass every scene before the operator reads. +- **RBM "The Wager" is parked** with open W2-level rulings (B5 named hand; three-surname fog; knife/voucher plant relocation after the concept-budget cuts). When it revives, it starts at W2 under this stack. +- The full calibration history — every proof round, diagnosis, and the operator's notes — lives in the v3 export's `working files/documentation/` (files prefixed PROOF_, DIAGNOSIS_, STRESSTEST_, PLAN_, CRAFTREAD_). Read `PLAN_PipelineRebuild_W2W3W4_v1.md` there if you need the full rationale; nothing in it overrides the files in this folder. + +## 7 · THE OPERATOR + +He reads fast, judges by ear, and writes replacement lines when something's wrong — those lines are the most valuable artifact this system produces: use them verbatim, bank them, and never make him give the same note twice. Ask for rulings, not permission. Surface OPEN items in batches before writer sessions, not one at a time during them. When output is bad, diagnose which layer failed (map / brief / writer / editor) before proposing anything — and never propose a restructure; this architecture is ratified, and improvements enter as single lines through the convergence loop. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Blueprint_PromoHarvest_v3.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Blueprint_PromoHarvest_v3.md new file mode 100644 index 0000000..efc1b87 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Blueprint_PromoHarvest_v3.md @@ -0,0 +1,128 @@ +# THE BLUEPRINT — promo harvest slot-spec · v3 (global, show-agnostic) + +*v3 delta: (1) Per operator ruling, ALL exemplars from RBM "Disowned" (shipped v3 + that cycle's ink) and the PH B0 sketch are removed — every slot now cites human-written cracked scripts only. (2) Fifteen new winners mined, covering the previously-missing lanes: RD/secret-heir (6 scripts), werewolf/romantasy (3), royal fantasy-revenge (1), plus 5 more progression scripts. (3) Two new slots (21–22), one expanded slot (20), one new image class (H), and the ritual section generalized — the RD lane turned out to run the SAME two-beat arc as the fantasy lane, which unifies the whole catalog. Corpus: 24 artifacts, 19 story-worlds, all human-written.* + +*Layer 1 of the two-layer ledger system. Updated only on operator sign-off when a new winner proves a new function. Every new show's ledger is generated by the HARVEST PASS (Layer 2) using this file as the extraction spec. Proven scripts prove functions, never content.* + +--- + +## THE MASTER ARC — PUBLIC PRICING → PUBLIC RE-PRICING (the most convergent structure in the catalog: 13+ shows) + +Every lane runs the same two-beat engine; only the pricing instrument changes. + +**Beat 1 — THE PRICING.** The world measures the hero publicly and prices them at the bottom, to laughter. +- *Device variant (progression/fantasy):* the ceremony altar (WBT) · the draft board (Draft Selection) · the Testing Stone ("Stage 3! My grandmother hits harder than that!" — Flameborne) · the scanner ("The panel lit red. Seven." — FLBM Bond) · power watches, odds boards, ranking scrolls. +- *Gatekeeper variant (RD/secret-heir):* luxury spaces priced by their staff — the showroom ("Get your grubby mitts off my car. It's a Lamborghini, not a dumpster truck." — appears near-verbatim in TWO shows, TBB and ValpOpen) · the VIP room · the bouncer · the teller ripping the check ("Nice try. Do you think I'm an idiot?" — TROT) · the receptionist, the hostess. +- *Rite variant (romantasy):* the formal mate rejection spoken aloud — "I, Alpha Denzel, reject you, Valerie." / the forced reply "I accept your rejection." (TLH, twice in one episode) · the bride sold, caged, called "it" ("Lock it in the cage." — Isobel) · the trial no bride survives. + +**Beat 2 — THE RE-PRICING.** The same public instrument re-measures the hero, and laughter becomes silence. +- *Device:* Stage 3 → Stage 6, "three hundred people who'd laughed at his 3 went dead silent" (Flameborne) · the board double-selects at "one hundred percent" (Draft Selection) · the scroll that fails to read Cloud (WBT) · the classification cycling past every rank into 400-year-old symbols (FLBM Zookeeper). +- *Gatekeeper → THE RECOGNITION DROP (see slot 21):* the convoy pulls up; the fingerprint verifies; the phone call lands; the butler bows past the senator's son. Same beat, human instrument. +- *Rite:* the bond that snaps back to life at the ball (TLH) · the dragon that stops mid-fire at her blood (Isobel). + +The harvest pass looks for BOTH beats in every source. A source rich in pricing but missing the re-pricing beat = W3 authorship territory, flagged. + +## LINE FUNCTIONS (22 slots) + +**1. THE WORLD-RULE LINE** — authority states the brutal social law in one breath. +› "Iron for the slaves, Bronze for the workers, Silver for the privileged." (WBT) · "She will bear his name… She will not speak in council. She will not hold property." (PE) · "Below ten, this injection is fatal. You can go home, mine kid." (FLBM Bond) · "Five princesses… Not one walked back out alive. I was the sixth." (Isobel) + +**2. THE MOCKERY-THAT-TEACHES** — insult carrying world exposition inside the joke. +› "Why is a Level One on Squad Three?" (Draft Selection) · "Guys like you don't drive cars like this… you clean them." (TBB + ValpOpen) · "He's a glorified zookeeper!" (FLBM Zookeeper) · "Stage 3! My grandmother hits harder than that!" (Flameborne) + +**3. THE SACRIFICE LINE** — what the family gave, concretely; strongest weaponized by the villain or as the hoarded gift. +› "My mother had sold the last of her medical pension to buy my place in this gymnasium." (FLBM Bond) · "I poured the rest of my savings into your Divine Injection because I believe in you. Do it for your Lyla and me. Love, Mum." (FLBM Frost Giant — read aloud by the bully) · "You needed a father more than the world needed another warrior. So I saved it for you." (Flameborne) + +**4. CRUELTY-IN-COURTESY** — politeness, reasonableness, or a "gift" as the knife. +› "Thank you for mining crystals for me." (WBT) · "You serve Benjamin Franklin now, like the rest of us." (TBB, dangling the hundred) · "You should see what you look like now… Look. Look at what you've become." (Seventh Seal, with the mirror) · "Don't cry. It's unbecoming of a princess." (Isobel — over her parents' bodies) + +**5. THE VICTIM-BLAMED BEAT** — the room turns on the wronged; includes **the frame-up** and **the shame splash** (mockery lands on the loved one). +› "Nobody looked at Ebony with sympathy. She was the problem." (PE) · "She pushed me! She tried to kill me — and our child!" (Luna's Secret — the staged fall) · "Hey Wren, that your boy? What happened? Did you forget to train him?" (Flameborne) · "You ruined this family's reputation." (ValpOpen) + +**6. THE PLAIN ANSWER / THE CHARGE SHEET** — flat, unpleading reply under pressure; extended form names the crimes to their faces. +› "I just looked where no one else does." (WBT) · "I've crawled out of worse." (TBB) · "You burned my room. You stole my core. You left me to die. And you call yourselves the future of House Phoenix?" (Seventh Seal) · "You incompetent coward. You had no courage to win the throne so you decided to kill my parents." (Isobel, spitting at the usurper's feet) + +**7. THE DEADPAN ACCEPTANCE** — insult met with agreement that disarms it. +› "Thanks. Grew them myself." (WBT) · "I'll be right here." (Draft Selection) · "What do you want your headstone to say?" (WBT UK) · comic-companion variant: "You're eating a mouse the size of your head." / "I contain multitudes." (FLBM Bond) + +**8. THE ALL-IN WAGER** — stakes named on both sides, in public; strongest form signs the death waiver. +› "You die, your family gets nothing." / "I signed it without reading the rest of it." (FLBM Bond) · "If I'm wrong — send me to the Dreaddeath Mines. But if I'm right, you let me stay." (WBT Field Trial) · "If Claire lands the deal, you'll get down on your knees… Sure enough to swear on Grandma Wilson's life?" (HIH 3.0) · "If you land one punch on me, you're in… if you fail, you'll be exiled." (Flameborne) + +**9. THE COST-OF-BEING-RIGHT** — punished specifically for being correct. +› "Cultivation Theory. Failed. For arrogance." (WBT Five Exams) · "Five points less for the student. what's your name?" (WBT canon) · "If he fails this one, it's a black mark on your personal record, Rita." (FLBM Zookeeper — the cost spreads to the believer) · Valerie held at the hospital, right about her dying father, believed by no one (TLH) + +**10. THE WITNESS LINE** — one voice that saw the truth and says so. +› "I knew it." (WBT Field Trial) · "You will always be Princess of Allarion to me." (PE) · "There's still something to you, isn't there?" (Weapon Selection) · "That's not possible," she whispered. (FLBM Zookeeper Rita, staring at the mark) + +**11. THE UNCONDITIONAL LINE** — love/loyalty without condition; includes **the reciprocal vow** (hero gives it to the companion). +› "It's not your fault. It will never be your fault." (WBT) · "Whatever you decide, Ebony. I am with you." (PE Nova) · "You chose me when I was nothing. Nobody else did. I'm not leaving." (FLBM Bond — hero to beast) · "Daddy… promise me you'll never leave me again." (ValpOpen Amelia) + +**12. THE CLIFF LINE** — authority/enemy forced to recognize the impossible. +› "Ren Patinder. What in the world are you?" (WBT Field Trial) · "Impress me, and I will take you as my protégé." (WBT Five Exams) · "You really are the Tiger, aren't you?" (TROT Ben Jameson, pinned) · the dragon going still at her blood (Isobel) + +**13. THE POWERSTART CANDIDATE** — rupture verb in clause one; includes **the flashforward cold open** (open at the peak, then "Twenty-four hours earlier…" — TBB bank robbery; WBT UK blood ring). +› "My uncle slit my parents' throats to take the crown. Then he sold me to the Dragon king." (Isobel) · "My own family hid my college acceptance letters so that I could continue to be their unpaid slave." (TSLAH) · "Valerie was ready to share her first night with her mate… until she found him naked in bed with her sister." (TLH) · "I knew the injection would kill me. My score said so. And I still took it." (FLBM Bond) · "An illegal traffic stop was about to become the biggest mistake of Officer Bill's life." (HIH) + +**14. THE TYRANT'S COMMAND** — public, absolute order that invites the silent refusal. +› "Kiss my hand. Then go back to the Pirorian. Smile. Dance. And obey." (PE) · "Sit down and keep your mouth shut." (HIH Grandma Willson, cane on floor) · the Alpha-tone command that forces the body to obey (Luna's Secret "ENOUGH!") · "Apologize to your sister now!" (TSLAH) + +**15. THE DEATH CLOCK** — the ticking terminal condition. +› "Sixty-three days. A forest that wants you dead." (PH canon via WBT-lane usage — cite the show's own source at harvest) · "I'll die before I hit puberty." (WBT Egg Boy) · "You have twenty-four hours to come up with the money or you're getting evicted!" (TROT) · "Two days. Bring me the contract or be ready to get blacklisted." (ValpOpen) · "thirty days to reach level three, otherwise you'll be expelled" (MVS 2.0) + +**16. THE FALSE WORLD-FACT** — the thing everyone knows that the hero will disprove; harvest it in an authority's mouth. +› "No digger beetle has surpassed Bronze rank in five hundred years of documentation." (WBT canon) · "Experiments with fungi always fail. Always." (WBT canon) · "Fated mates are an ancient superstition." (TLH Tristan — the false fact as betrayal's alibi) · "We've never tested a Beast Master because there's never been one." (FLBM Zookeeper) + +**17. THE CONCEALMENT TAX** — humiliation absorbed on purpose to protect the secret; the audience knows what it costs. *(The RD lane's core engine — present in all six RD scripts.)* +› Quinn taking the spit: "I couldn't show anyone who I really was." (Draft Selection) · "Part of him wanted to shout, 'I'm a billionaire now.' But he held back—not yet." (HIH 3.0) · "Serena kept her expression blank… The perfect idiot mask." (Seventh Seal) · Lucas paying five million in rent to stay near his daughter, still silent (ValpOpen) + +**18. THE IMPOSSIBLE ACCEPTANCE** — a death-sentence path accepted like a choice, into laughter or silence. +› "I want to try." → the waiver, signed unread (FLBM Bond) · "I'll go." (Seventh Seal, whole hall laughing) · "I accept." (Isobel, at the Crucible gate) · "I'll marry her." (TROT) · "As an Ashford, I claim the right to enter the Gauntlet!" (Flameborne) + +**19. THE OVERHEARD VERDICT** — the hidden truth heard through a door; the hero can only carry it. Includes **the servant's whisper** (a low-status ally explains the hidden history). +› "I should've strangled her dead like I strangled her mother." (Seventh Seal) · "I would rather see a beggar sit on my throne than any woman. Even my own daughter." (PE) · "That dumb girl doesn't deserve you." — through the crack of the door (TLH cold open) · "Your father murdered the King's mother. In the Drakovian war. Ten years ago." (Isobel — Lira's whisper) + +**20. THE WRONG EXPLANATION** *(expanded in v3 from "the misread secret")* — when evidence of the hero's power appears, the world invents a degrading explanation to protect its hierarchy; an ally may confide the wrong theory of the secret. +› "He must've stolen it… there's no way he has that kind of money." (ValpOpen Karen) · "There's no way he won fairly. He's a cheater. He sabotaged Loop's weapon." (Weapon Selection) · "You must have been given prohibited knowledge. That's the only explanation!" (WBT Field Trial) · "Doris Young doesn't wink at random people." (HIH — suspicion the hero can't afford) · ally variant: "I'm an Original… I can sense other Originals." (Weapon Selection Erin — he's a vampire) + +**21. THE RECOGNITION DROP** *(v3 — 7 shows; the RD lane's re-pricing beat as a line)* — a gatekeeper or authority suddenly recognizes the hidden identity and collapses into deference, mid-mockery, in front of the mockers. +› "The Tiger is back." (TROT pawn shop, dialed from memory) · "Do you have any clue who that man is? … You're done. Turn in your badge and gun by the end of the day." (HIH chief, over the radio) · "Cha–Chairman Gray!" — Flynn bowing so fast it echoed, seconds after ordering the "trash" removed (ValpOpen) · "Mr Talen, I'm sorry. I didn't realize." (MVS bank, the fingerprint) · the butler bowing past the senator's son to the "broke" husband (ValpOpen) · Brennan "pale as a ghost": "Mr. Quinn Talen. What… what can I do for you?" (MVS) + +**22. THE DEATHBED CHARGE** *(v3 — 5+ shows)* — the dying parent/mentor's last instruction that programs the hero; often interrupted at the crucial word. +› "Remember the face of the man who shot me, Tiger. Promise me you'll make that bastard pay." (TROT) · "Don't ever reveal your secret to anybody, son… promise me you will do everything it takes." (MVS) · "Isobel. Take care of yourself. And take care of Myron." (Isobel) · the interrupted variant: "Because Charlie is really –" — flatline (HIH 3.0) · "Trust your jade pendant. It will guide you." (TBB Mr. Lin, deathbed-adjacent) + +## IMAGE CLASSES (8) + +**A. THE LITERALIZED ERASURE** › "Gray. The color of failure." (WBT) · the bond-flash "so weak it barely illuminated his wrist" (WBT) · the bride addressed as "it" (Isobel) · the name misread on purpose: "I'd listen to your parents, Ran." / "It's Ren." (WBT Egg Boy) +**B. THE CAUSAL-CHAIN TURN** › the tear rolls into the egg's crack — the hatch answers (WBT) · the sand fused to glass under the heel he knew was coming (Flameborne) · blood on the book cover — "the key was blood" (MVS 2.0) +**C. THE PUBLIC PRICE** › the spilled crystal basket; kneeling over it empty (WBT) · dress torn at the knee before the council (PE) · money thrown in the face: "You want my money, don't you?" (TSLAH) +**D. THE UNCOUNTED THING** › the Dragonroot in silk, hoarded a lifetime (Flameborne) · the mother's letter in the shirt pocket (FLBM Bond) · the jade pendant, cold for twenty years (TBB) · the father's ring with the "T" inside (TROT) · the fake-gold charm bracelet: "It's not real gold, but it's the best I could do." (HIH 3.0) +**E. THE SYSTEM'S VERDICT MADE VISIBLE** › "Odds of me winning, one hundred to one. Odds of me dying, two to one." (WBT UK) · "The panel lit red. Seven." (FLBM Bond) · the ranking scroll collapsing unreadable (WBT) · the inverted verdict: every line item stamped "PAID IN FULL" — no name attached (TBB) +**F. THE KNEEL** › begging Kai with the answer in his mouth (WBT Five Exams) · Harold forced down: "Bow down and apologize, or this will be your last day in the Willson mansion." (HIH) +**G. THE BETRAYAL MADE OBJECT** › Max's sword offered flat across both palms — then in Cheryl's hand against Aiden (Flameborne) · Alaric's armor, the gift that was a leash (Seventh Seal) · the vial emptied into the chamomile tea (Luna's Secret) · Seth's radioactive fake diamond for the child (ValpOpen) +**H. THE DESTROYED TOKEN** *(v3)* — the bully destroys the love-object in public. › the roses crushed under the cop's boot (HIH) · the mother's letter torn, pieces fluttering (FLBM Frost Giant) · the egg punted "like a football" (WBT Egg Boy) · the cupcake thrown at his head (TROT) · the check ripped to tiny pieces — inverted: the hero rips the buyout check himself (TROT / ValpOpen) + +## EXCHANGE SHAPES + +Library lives in `register_anchors` (shapes index). v3 additions: **the recognition-drop volley** (mockery in progress → the call/fingerprint/ring lands → the gatekeeper's collapse performed in front of the mockers: "Uh—Chief! What's the issue?" → "You're done.") · **the wrong-explanation pile-on** (impossible evidence → the room competes to degrade it: "faulty weapon" / "he cheated" / "she slept with him") · **the forced-marriage bargain** (scandal → terms named → "Marry him and I'll let you keep your shares. It's that simple." — TROT, HIH 3.0, Isobel) · **the poisoned offer** (help with a degrading string: "My offer for a spot in the human trials is still open… Either forget Layla, or forget this opportunity." — MVS; kindness-with-strings) · **the rejection rite** (formal wounding words → the bond audibly snaps → the forced "I accept your rejection" — TLH). Established shapes gain: the analogy ladder, shame-inversion rescue, devil's-bargain ladder, beg-loud, heretic's correction — all confirmed unchanged. + +## HARVEST RULES (bind the pass) + +1. Verbatim quotes only, with episode/chapter reference on every row. Ore, not jewelry. +2. Every row carries KEEP-VERBATIM / COMPRESS / REVOICE. No pre-filtering for polish — punch-up is W3's job. +3. Scope: lines, staged images, exchange patterns, and BOTH beats of the PUBLIC PRICING arc — **never narration blocks**. +4. Empty slots are reported, not padded. The thin-slot report is the **authorship map** (validated on the WBT cold test). +5. FREE HARVEST (≤10): anything slotless that made the reader react. +6. Statuses: **CANON** (source-verbatim, flagged) · **LOCKED** (operator ink) · **PROVEN** (earned only by a shipped promo surviving W5). +7. **Curation cap:** ~22 slots (raised from 20 after absorbing two new lanes; one slot per newly proven cross-lane function, never per script). A new slot must show ≥2-show convergence and displace or subsume nothing. + +## CORPUS (24 artifacts · 19 story-worlds · all human-written) + +**Progression/academy:** WBT ×5 (Five Exams · UK Cold Open · SSS Dragons · Egg Boy · Field Trial) · Draft Selection · Weapon Selection · Flameborne · Seventh Seal · MVS Tragic Childhood · MVS 2.0 Live Action · FLBM ×3 (Frost Giant · Bond · Zookeeper) +**RD/secret-heir:** HIH Traffic Cop · HIH 3.0 Grandfather's Wish · ValpOpen Car Showroom · TROT Pawn Shop · TSLAH Acceptance Letter · TBB Supermarket +**Romantasy/werewolf:** TLH Denzel's Truth · Luna's Secret (Crushed & Crowned) · *FITP Original — flagged: this is source-novel text, not a cracked promo; mined at function level only (the mate-recognition beat, the first-kindness beat) and never for register* +**Royal fantasy-revenge:** Princess Ebony (operator-written) · Isobel in Crucible (Bride of Dragon) +**Removed per operator ruling:** RBM "Disowned" (all versions) · PH B0 sketch. + +## LANE-COVERAGE LEDGER + +Covered: progression/academy (deep) · RD/secret-heir (deep — 6 scripts, remarkably formulaic in the best sense: the lane IS the gatekeeper gauntlet + concealment tax + recognition drop) · werewolf/mate-bond (2 promos + 1 source) · royal fantasy-revenge (2). Thin: contemporary revenge without romance · horror/thriller · sports. The blueprint now generalizes across the two biggest catalog families; remaining lanes get 2–3 winners fed through this same mining pass before the engine runs on a show from them. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ebony_ControlScript_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ebony_ControlScript_v1.md new file mode 100644 index 0000000..ba4a09b --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ebony_ControlScript_v1.md @@ -0,0 +1,737 @@ +# CONTROL SCRIPT — "Princess Ebony and the Silver Dragon" (shipped anchor) + +*Permanent calibration control for the T6.10.2 CONTROL GATE. A restored/new pipeline rule that FIRES on this script is miscalibrated — tune until Ebony passes clean (production-law rows such as the AIVO em-dash ban are control-exempt for Ebony). This is the operator-supplied anchor exemplar; the EXEMPLAR_CORPUS anchors are drawn from it ("Girl. Not Ebony," the salute, "She was the problem," the unanswered hand). Preserved verbatim; markdown-escape artifacts (`\!` `\[` etc.) normalized only.* + +--- + +EBONY (V.O): "The day they decided who I'd marry… they made me watch someone die first." + +[EXT. CASTLE COURTYARD – DAY] + +NARRATOR: They chained the woman with irons in the middle of the castle courtyard. + +MAN IN THE CROWD: "Burn her! Dragon witch!" + +NARRATOR: The woman made one mistake. Having a dragon. That was a man's privilege. + +Fourteen-year old Ebony watched alongside her father, the King. + +KING LIAM: "Let this be a lesson to every woman in Allarion." + +EBONY: "Father, please, let her go!" + +KING LIAM: "Ebony, it is the law of this Kingdom." + +NARRATOR: Ebony tried to look away. + +But the King made her watch as they burned the woman alive. + +KING LIAM: "Never forget, even as a Princess… you obey men." + +[INT. CASTLE THRONE ROOM – DAY] + +NARRATOR: Ebony was forced to meet King Beriod. She was a potential bride – he was old enough to be her grandfather. + +He studied her face, tilted her chin with a finger. + +BERIOD: "She'll do. Good bones. She'll fill out." + +NARRATOR: His hands reached toward her hip. Ebony slapped it away. + +[SFX: SLAP] + +EBONY: "Don't touch me! I don't belong to you!" + +NARRATOR: The throne room went quiet. Her father grabbed her arm, bruising her. + +KING LIAM: "Apologize." + +EBONY: "He was going to grab me." + +KING LIAM: "Apologize. Now." + +NARRATOR: Ebony shook her head. + +KING LIAM: "Now, girl!" + +NARRATOR: When Ebony refused to apologize, she was locked in a pantry for a week. + +In this Kingdom, girls didn't fight back. They disappeared. + +[INT. CASTLE CORRIDOR — OUTSIDE THE KING'S STUDY — NIGHT] + +NARRATOR: Then one evening, she heard her father's voice through the study door. + +KING LIAM: "I would rather see a beggar sit on my throne than any woman. Even my own daughter." + +NARRATOR: But Ebony had heard a different story. Whispers from her mother. A prophecy that she would one day be Queen. + +And after hearing her father's words… Ebony went looking for proof. + +[SFX: A HEAVY DOOR CREAKING OPEN] + +[INT. OLD ARCHIVE WING – NIGHT] + +NARRATOR: She tore through the scrolls and tomes in the old archive. Nothing. + +Just as she was about to give up, she looked behind a rotting old tapestry – and the wall began to rotate. + +[SFX: STONE GRINDING] + +A hidden room. Scrolls everywhere. + +And one — glowing on a pedestal. + +She picked it up. The parchment was warm. + +The Princess of Allarion who inherits a dragon will become Queen of two realms. + +[SFX: A SHARP PULSE OF LIGHT] + +NARRATOR: The scroll came alive. Light poured from the letters — and something inside Ebony's chest answered it. Heat flooding through her body, building, swelling, too much to hold. + +[SFX: A DEEP BOOM — FELT IN THE CHEST] + +NARRATOR: Ebony gasped. The scroll fell from her hands. Black scales tore through her arms. Her eyes went black. + +She saw her. A dragon. Ancient. Enormous. + +NOVA: "I choose you." + +NARRATOR: The voice shook the chamber. Dust fell from the ceiling. The scrolls on every shelf trembled. + +NOVA: "I am Nova. I have waited centuries for you, Ebony. And every word on that scroll is true." + +NARRATOR: A dragon. Older than every bloodline in this kingdom. And she had chosen Ebony. + +In Allarion, a woman hiding a dragon was burned alive. Her own father had signed that law. + +EBONY (V.O): "And if my father finds out… he'll be the one who kills me." + +NARRATOR: Years later. + +[SFX: HEAVY DOOR SLAMS] + +[INT. CASTLE LIBRARY — DAWN] + +KING LIAM: "You will choose a husband tonight. Refuse — and I will drag you to the castle gates and marry you to the first man who walks through them." + +NARRATOR: Heat ripped up Ebony's spine. Inside her, Nova clawed to the surface. + +NOVA: "Say the word, Ebony. And I will burn him where he stands." + +NARRATOR: For four years Ebony had kept Nova secret. But sometimes, she would threaten to explode and reveal everything. + +NOVA: "Your eyes, Ebony. They're shifting." + +NARRATOR: Silver eyes bleeding to black - the one thing she could never control. + +Tonight, every prince in the realm would arrive with a dragon of his own. If even one of them sensed Nova— + +Ebony would be dead before morning. + +KING LIAM: "Well?" + +NARRATOR: Ebony forced the heat down. Swallowed the fire. And made the choice that would walk her into the most dangerous room in Allarion. + +EBONY: "I'll go to the ball, Father." + +[SFX: DOOR CLOSING] + +NARRATOR: Ebony pressed her palms against the cold library table and waited for the heat to pass. Nova paced inside her mind like a caged beast. + +NOVA: "One day, Ebony. One day you will stop bowing to that man." + +EBONY: "One day. Not today." + +--- + +[INT. CASTLE CORRIDOR — MORNING] + +NARRATOR: She hadn't made it ten paces before the voice she hated most found her. + +EDWIN: "How does it feel? Being auctioned off like livestock?" + +NARRATOR: Her younger brother leaned against a pillar, arms crossed, grinning. Prince Edwin — fourteen years old, already a mirror of their father's worst beliefs, and absolutely delighted by anything that diminished his sister. + +EDWIN: "Princes from every corner of the realm. All here to bid on you. How thrilling." + +EBONY: "You sound eager to see me gone." + +EDWIN: "Everyone is eager. Once you're married off, Allarion can finally stop pretending you matter." + +EBONY: "And once I'm gone, you'll be the most disappointing person in this castle all by yourself. At least now you have competition." + +NARRATOR: Edwin's grin faltered. Inside Ebony's mind, Nova stirred. + +NOVA: "Cruelty makes you no different from them, Ebony." + +NARRATOR: Ebony didn't respond. She'd been ignoring Nova's lectures for four years — not because she disagreed, but because kindness in this castle was a luxury that got you killed. You showed softness in Allarion, and someone used it to cut you open. + +Edwin recovered. He leaned close, dropping his voice. + +EDWIN: "Oh — I almost forgot. Father's invited King Beriod to sit at the head table tonight. Right beside you." + +NARRATOR: Ebony's stomach dropped. + +EDWIN: "I hear he's been asking about you. Specifically." + +NARRATOR: He walked off whistling, leaving Ebony alone with the name ringing in her skull. Beriod. The same man who had tried to buy her when she was fourteen. And tonight, he'd be sitting right beside her. + +That was who was waiting for her at the ball. + +NOVA: "I do not like this, Ebony." + +EBONY: "Neither do I." + +--- + +[INT. CASTLE BALLROOM — EVENING] + +[SFX: ORCHESTRAL MUSIC SWELLING, CROWD MURMURS] + +NARRATOR: And yet, Ebony attended the ball as her father wished. She wore the red dress her mother had made her. On the night her father was selling her off, her mother made her look like a queen, complete with a black diamond tiara. Tonight, it felt like armor. + +Ebony stepped into the ballroom — and felt them. Dragons. Dozens of them. Inside dozens of princes. Their awareness pressed against her like wolves circling prey. + +Nova shrank inside her. + +NOVA: "Too many. If even one senses me—" + +EBONY: "I know." + +NARRATOR: Her father was waiting at the top of the stairs. He gripped her arm before she'd taken two steps. + +KING LIAM: "Stand up straight, Ebony. Your suitors are watching." + +NARRATOR: Not — "are you alright?" Not — "you look beautiful." Her suitors. As if she were a horse being trotted past buyers. + +She straightened. She descended. + +Halfway down, Prince Edwin materialized beside her — because Edwin could smell blood in the water from across a castle. + +EDWIN: "Is that mother's dress? How sweet. She must have wanted you to feel special before they carted you off." + +[SFX: LAUGHTER FROM A CLUSTER OF PRINCES NEARBY] + +NARRATOR: A knot of princes near the foot of the stairs glanced up at her. + +PRINCE: "That's the one? She's the reason we traveled three kingdoms?" + +[SFX: MORE LAUGHTER] + +NARRATOR: Edwin grinned. + +EDWIN: "All that effort, and still they're unimpressed." + +NARRATOR: Ebony's jaw tightened. Nova surged — heat flooded her chest, black crept into the edges of her vision. + +NOVA: "Breathe. If your eyes shift here, we are dead." + +NARRATOR: As she reached the bottom step, Captain Geralt, the head of the King's Guard, moved to her side. His hand rose — steady, careful — and adjusted the black diamond tiara where it had shifted on her head. + +GERALT: "You look wonderful, Princess. Tonight is your night." + +NARRATOR: Ebony smiled, stepped deeper into the ballroom – and froze. + +A prince had caught her eye – one she didn't recognize. Dark-haired. The only man in the room who wasn't laughing, appraising, or looking away. + +The rest of the room disappeared. + +Nova went silent. + +On the other side of the ballroom, something stirred deep within Prince Greyson of Piroria. + +RADION: "Those eyes." + +GREYSON: "What about them?" + +RADION: "I would recognize them anywhere." + +GREYSON: "There is something about her. I feel…" + +NARRATOR: Greyson stopped, he and Ebony's eyes locked from across the room. + +RADION: "She carries Nova. My mate. Bonded to me centuries before either of you were born." + +NARRATOR: Greyson's pulse spiked. + +RADION: "And because our dragons are true mates, Greyson — so are you. Princess Ebony is your mate." + +NARRATOR: Greyson didn't move. His mate stood twenty feet away — in a kingdom that would burn her alive. + +RADION: "Do not approach. Her dragon is hiding. If we move too soon, we expose her." + +NARRATOR: Their eyes met. She looked away first — confused, flushed — and disappeared into the crowd. + +RADION: "We are not leaving this kingdom without her." + +--- + +[SFX: SWELL OF MUSIC] + +NARRATOR: A courtier clinked his glass. + +COURTIER: "Let the dances begin!" + +NARRATOR: Ebony awkwardly waited for a man to claim a dance with her, and to her disgust - it was King Beriod. + +He offered her his chubby hand and Ebony had no choice but to accept. They began the movements of the dance. + +His hand settled on the small of her back. Then it slid lower. + +Ebony stiffened. She kept her voice measured — the voice of a princess trained to navigate men like this without causing a scene. + +EBONY: "Your hand, sir... would you mind?" + +NARRATOR: Beriod smiled. He didn't move his hand. He pressed it firmer. + +BERIOD: "I like how uncomfortable you're getting. It's cute." + +NARRATOR: Nova erupted inside Ebony's chest — heat ripping up her spine. Her vision blurred. She could feel her eyes shifting, the black creeping in at the edges, scales forming beneath the skin of her forearms. + +NOVA: "Let me OUT. I will melt the flesh from his bones—" + +NARRATOR: Ebony's voice came out louder than she intended — sharp enough to cut through the music. + +EBONY: "I said — let me GO!" + +[SFX: MUSIC FALTERS] + +NARRATOR: The song ended. The room turned. And every eye landed on Ebony — not on the man whose hands had been crawling over her body. Nobles whispered behind fans. Women shook their heads. + +Beriod straightened his coat, and walked with a disgusted look on his face. The court watched him go with approving nods. + +Nobody looked at Ebony with sympathy. She was the problem. + +NARRATOR: Something inside Ebony cracked. She was done. Done hiding. Done being touched by men the system protected and then blamed for objecting. Nova was screaming inside her skull and for the first time in four years, Ebony wanted to let her out. Damn the law. Damn the consequences. + +She felt her hands heating, scales rippling under her skin — she was seconds from shifting in front of every prince in the realm. + +Then a hand caught her wrist. Firm. Not rough. + +Greyson. + +He pulled her toward him as the next song began. And before she could speak— + +GREYSON: "I'm sorry that happened." + +NARRATOR: Four words no man in Allarion had ever said to her. The system said it was his right. The law said she was property. And this prince — this Pirorian — had looked at the entire system and called it what it was. + +The dance carried them forward. Greyson's hand stayed at her waist — correct, respectful, nothing like Beriod's grip. + +EBONY: "Is it true? That Pirorian women train for combat? Everyone says it is..." + +GREYSON: "It's true. Women serve in the military. Hold government positions. Train alongside men." + +EBONY: "As equals?" + +GREYSON: "As equals." + +NARRATOR: The word hung between them. Equal. A concept that didn't exist in Allarion. Something cracked open inside Ebony — not Nova, not fire. Something older. Hope. + +She went further than she should have. Further than was safe. + +EBONY: "I believe women should rule." + +NARRATOR: The music wavered. Greyson's eyes widened. + +EBONY: "There's a prophecy. Spoken at my birth. It says I will be queen. That I'll rule two nations as one. And I intend to make it happen." + +GREYSON: "You're telling me this? Here? Now? Please — keep your voice down. If anyone here heard that—" + +NARRATOR: Ebony laughed. Not bitterly. Worse — with the exhaustion of someone who had already lost. + +EBONY: "What are they going to do? Sell me to the highest bidder? They're already doing that. Marry me off to a stranger? That's tonight's plan. I've been a disappointment to this kingdom since the day I was born. The only thing left they can take from me is my life — and most days, I'm not sure that's even mine to keep." + +[SFX: MUSIC STOPS ABRUPTLY] + +NARRATOR: The music abruptly stopped. Ebony stood in the center of the ballroom, tears running down her face. She wasn't sobbing, wasn't dramatic, just… sad. She quietly cried, in front of everyone. + +The court stared. Greyson gripped her hand tighter. + +NOVA: "Ebony… your father." + +--- + +NARRATOR: King Liam crossed the floor. He took Ebony by the arm. His grip was iron. His voice was low enough that only she could hear. + +KING LIAM: "You're crying. In front of every royal family in the realm. Where is your decorum?" + +NARRATOR: Not — "what did you say?" Not — "what did you tell the Pirorian?" He hadn't heard a word. He didn't care what she felt. He cared what it looked like. + +He steered her toward the throne dais. Edwin watched from the corner, cup in hand, grinning. Captain Geralt shifted at his post — he tensed, his heart breaking at Ebony's tears. + +Every eye was on them as King Liam extended his hand. Palm up. + +The command was ancient. Public. Absolute. + +KING LIAM: "Kiss my hand. Then go back to the Pirorian. Smile. Dance. And obey — the way a princess should." + +NARRATOR: Ebony stared at the hand. She thought of Beriod's grip on her waist. Edwin's smirk. The hundred men who had watched a man grope her and said nothing. She thought of Greyson — the one person who had said he was sorry. + +And Nova — inside her — for the first time in four years, was not surging. Not begging. Not fighting. + +Waiting. + +NOVA: "Whatever you decide, Ebony. I am with you." + +NARRATOR: Ebony looked at her father's hand. Thirty years of rule. Nobody had ever left that hand unanswered. + +She stepped away from her father. + +[SFX: DEAD SILENCE] + +NARRATOR: The room went silent. The hand stayed extended. Unanswered. The King of Allarion stood before every royal family in the realm — and his daughter walked away from him. + +--- + +NARRATOR: Then, Nova erupted, and Ebony didn't fight her. Instead, she fed her. Four years of hiding. Four years of swallowing fire so this kingdom wouldn't kill her for what she was. Four years of bowing and pretending she wasn't the most powerful being in the room. + +It all tore loose. + +[SFX: A LOW, SHUDDERING ROAR THAT BUILDS AND SHAKES THE ROOM — GOBLETS SHATTERING, CHANDELIERS SWINGING] + +NARRATOR: The scream hit every dragon in the ballroom at a frequency that dropped men to their knees. Princes collapsed. Goblets shattered against stone. The golden chandeliers swung wildly overhead. + +Ebony stood in the center of it. And for the first time in her life, she understood what she was. Not a princess hiding a secret. A queen with a dragon older than every bloodline in this room. + +NOVA: "There you are, Princess Ebony." + +NARRATOR: Ebony moved through the stunned ballroom — and the room parted. + +Not because she pushed. Because the dragons inside every prince were screaming at their humans to get away from her. + +Prince Tye was on his knees first. The boy who had mocked her for years. + +EBONY: "Stand up." + +NARRATOR: He couldn't. + +Nova's presence pressed down on every dragon in the room — and their humans buckled with them. + +Ebony stopped in front of King Beriod. + +This time, he didn't smile. + +EBONY: "I will never be yours. You disgusting old man." + +NARRATOR: She didn't touch him. She didn't need to. + +His glass shattered in his hand. + +Across her, princes dropped - one by one. Not because she commanded it. Because their own dragons would not let them stand. + +This wasn't a tantrum. This was what happened when the most powerful dragon in the kingdom stopped hiding. + +Then the guards came. + +The only men in the room still standing. Blades drawn. + +And Geralt stepped between them. + +GERALT: "Put your weapons down, she is a Princess of this Kingdom!" + +NARRATOR: The ballroom was chaos — princes nursing wounds, guards unsure of their orders, her father's face a controlled mask of fury. And then Ebony saw him. + +Greyson. Standing perfectly still in the middle of the wreckage. + +Something shimmered around him — faint, crystalline, like ice catching light. Visible only to her. + +Two words. Quiet enough that only she could hear. + +GREYSON: "Pick me." + +NARRATOR: Something locked inside Ebony's chest. The words she wanted to scream — I WILL NOT HAVE YOU — caught in her throat. Her mouth opened. Nothing came out. The mate bond — the ancient connection flowing from Nova to Radion, from dragon to human — physically wouldn't let her reject him. + +NOVA: "Ebony... please." + +NARRATOR: She ran. Past Greyson. Past the shattered goblets and the bleeding princes and the stunned court. Because she couldn't stay, and she couldn't say the words, and the only thing left was to move. + +Behind her, Greyson didn't follow. + +RADION: "She'll understand. Eventually." + +GREYSON: "And if she doesn't?" + +RADION: "Then I'll make sure she survives long enough to learn." + +--- + +NARRATOR: King Liam stood before what remained of his court. His daughter had committed treason against every visiting kingdom. Alliances shattered. Reparations demanded. + +He would fix this the only way the law allowed. + +KING LIAM: "My daughter is no longer under my protection. Any man who will take responsibility for her may claim her as his wife." + +NARRATOR: Ebony stood at the edge of the room, guards gripping her arms, watching her father sell her. + +KING LIAM: "One hundred thousand silver." + +[SFX: SILENCE] + +NARRATOR: Nothing. + +KING LIAM: "Fifty thousand gold." + +[SFX: SILENCE] + +NARRATOR: Stone silence. No one moved. + +KING LIAM: "Sixty thousand gold AND one hundred thousand silver — to any man in this room who will take my daughter!" + +NARRATOR: A prince near the front raised his hand. Then sat down as if shoved by something no one could see. His mouth opened. No words came out. Because Radion was already inside him. Inside all of them. + +RADION: "None of you will claim her. Not one." + +NARRATOR: His voice moved through the ballroom like a tremor through stone. Every dragon inside every prince received the same ancient command. And one by one, their humans locked in place. + +King Liam looked even more desperate. + +KING LIAM: "Seventy thousand gold!" + +NARRATOR: Nothing. The room stared in silence. + +KING LIAM: "Very well. Bring her before the Council." + +EBONY: "Father, please!" + +NARRATOR: The guards seized her arms. Ebony dug her heels into the stone — and they shoved her forward. She hit the ground hard. Her dress tore at the knee. + +KING LIAM: "For once, just do as you're told, girl!" + +NARRATOR: Girl. Not Ebony. Not daughter. Not princess. Girl. Her heart fell. + +[SFX: HEAVY DOORS, BOOTS ON STONE] + +They dragged her from the ballroom, through the corridors, and threw her before the old gray beards of the Council. + +--- + +[INT. COUNCIL CHAMBER — NIGHT] + +EBONY: "Nova... they're going to kill me. We have to do something." + +NOVA: "I need your help, child. I can reach into a dragon's mind… but only one. And only if you help me focus." + +EBONY: "What can I do?" + +NOVA: "Listen to me. You are a princess. You are MY princess. And you can do this. You know these men, choose the weakest - focus everything you have on him." + +NARRATOR: Five councilmen voted. One by one. + +COUNCILMAN 1: "Death." + +NARRATOR: Ebony flinched. Nova's voice steadied her. + +NOVA: "Do not get distracted." + +COUNCILMAN 2: "Death." + +NOVA: "Push, Ebony. Focus only on the one." + +COUNCILMAN 3: "Death." + +EBONY: "I can do this." + +COUNCILMAN 4: "Death." + +NARRATOR: She remembered Beriod's hand on her waist, Prince Edwin's cocky smile, and all the greedy faces of the princes… + +She would not allow a man to decide her death. Not today. Not ever. + +COUNCILMAN 5: "Death." + +NARRATOR: Five votes for death. One vote left. Lord Lyndon, the sixth councilman, stood. + +Ebony pushed. Everything she had — every drop of Nova's ancient power — aimed at one man. + +NARRATOR: Lyndon's mouth worked. His jaw trembled. His eyes bulged as though something invisible was gripping his throat. + +Because something was. Nova — channeled through Ebony — had reached into Lyndon's dragon and issued a command it could not refuse: your human will not vote for death. + +Lyndon fought it. His face went red. His fists clenched on the table. + +LORD LYNDON: "Duh... duh... ba... ba-banishment." + +NARRATOR: The word fell into the room like a stone into water. + +NOVA: "You did it, Ebony." + +NARRATOR: Ebony collapsed to her knees. + +And King Liam finally allowed a breath to escape him. His shoulders dropped. His eyes closed for half a second. + +Relief. + +He didn't want his daughter dead. He just couldn't save her inside a system he'd built. + +He hid it immediately. Straightened. Hardened. + +KING LIAM: "The sentence is banishment. Effective immediately." + +--- + +[EXT. CASTLE STREETS — NIGHT] + +[SFX: CROWD SHOUTING, OBJECTS HITTING STONE AND BODY] + +NARRATOR: Captain Geralt walked beside her. Title stripped. Dress stained. Tiara gone. Name gone with it. She was just Ebony now — a convicted traitor walking through the streets of the city that had been her home. + +The mob pressed in from both sides. Rotten tomatoes splattered against her arms. Stones flew. Voices screamed words she'd heard whispered behind doors her whole life, now shouted openly. + +CROWD VOICE 1: "Cursed!" + +CROWD VOICE 2: "Witch!" + +CROWD VOICE 3: "Monster!" + +NARRATOR: Then a woman pushed through the crowd. She wasn't throwing food. She was shaking with rage, and the bruises around her left eye were fresh — purple, swollen shut. + +BRUISED WOMAN: "My husband beat me because of YOU! Because of what you did at the ball! He said if a princess can't behave, his wife sure as hell better!" + +[SFX: STONE IMPACT] + +NARRATOR: The stone caught Ebony in the shoulder. The realization hit harder. Her rampage hadn't hurt the princes. They'd gone back to their kingdoms with bruised egos and diplomatic leverage. It was the women who paid. Husbands watched a woman defy the King — and took it out on the women closest to them. + +The system didn't punish the powerful. It punished the powerless. And Ebony's rebellion had given every man in Allarion permission to remind his wife who was in charge. + +NOVA: "Ebony..." + +[SFX: STONE IMPACT] + +NARRATOR: Another stone. Her knee buckled. She went down — palms hitting cold cobblestone, the mob closing in above her. + +--- + +NARRATOR: A hand reached down. + +Geralt. He gripped her arm and pulled her to her feet. Then he stepped in front of her — placing his armored body between her and the crowd. Not with his weapon drawn. Not with a command. With his back. + +He walked her forward, shielding her, one hand steady on her arm. And he leaned close — close enough that only she could hear. + +GERALT: "You will always be Princess of Allarion to me." + +NARRATOR: He pressed his fist to his chest. The Knight's Guard salute — reserved for royalty. Ebony didn't have a title anymore. He gave her one anyway. + +She couldn't speak. Her throat closed around everything she wanted to say. She nodded once — and kept walking. + +--- + +[EXT. CASTLE GATES — NIGHT] + +[SFX: WIND, DISTANT CROWD, FOOTSTEPS ON COBBLESTONE] + +NARRATOR: The gates stood open. Ebony waited — bruised, stripped of her title, the red dress her mother had made now torn and stained. + +Then she heard him before she saw him. + +[SFX: SHUFFLING FOOTSTEPS, UNEVEN GAIT] + +NARRATOR: A shape emerged from the dark road. Hunched. Limping. He stepped into the torchlight and Ebony's stomach turned. + +Matted hair in greasy clumps. Teeth blackened and broken. Rags torn through with holes. And the smell — unwashed skin and something sour that made her eyes water from ten feet away. + +A guard stepped forward. + +GUARD: "State your name and business." + +NARRATOR: The man looked up. His eyes — dark, calm — found Ebony through the torchlight. + +BORIS: "Boris. I heard there was a woman in need of a husband." + +NARRATOR: Just Boris. No family name. No title. No land. + +EBONY: "No." + +NOVA: "Ebony…" + +EBONY: "Look at him, Nova. Look at him." + +NOVA: "I see him. And you don't have a choice." + +NARRATOR: She didn't. The law was the law. Ebony turned to her father. + +EBONY: "Father, I promise… I will do whatever it takes." + +NARRATOR: King Liam's jaw tightened. + +KING LIAM: "It is too late, Ebony... it is done." + +NARRATOR: He took her hand. His grip was firm but his fingers were trembling. He walked her to the officiant. + +Toward the stranger, Boris, who smelled like the gutter. + +The officiant unrolled a scroll. He did not look at Ebony. + +OFFICIANT: "Under the law of Allarion, this woman is bound to this man in the sight of the King and the realm." + +NARRATOR: Ebony stood still, in her now torn red dress. No tiara. The hem dragging in the grime of the street. + +OFFICIANT: "She will bear his name. She will bear his children. She will not speak in council. She will not hold property." + +NARRATOR: Not even an ancient dragon could burn laws from the scroll. + +OFFICIANT: "She will not leave his home without permission." + +NARRATOR: Ebony's hands shook. She pressed them together to stop it. + +OFFICIANT: "Do you submit to these bindings for the rest of your natural life?" + +NARRATOR: The audience in the courtyard was quiet. No jeering now. She thought of the bruised woman, the stone, of every act of defiance, of what it might cost the women of her Kingdom. + +She turned to look at her father. He was looking away. His hand rose to his face, quick, almost invisible, and wiped a tear from his eyes. + +EBONY: "I will do as best I can." + +NARRATOR: Not "I do." Not submission. Not surrender. But close enough for the law to accept. + +The officiant rolled the scroll shut. Her father had straightened. His eyes grew hard. + +KING LIAM: "It is done. Close the gates when they leave." + +NARRATOR: She was no longer Princess Ebony of Allarion. She was the wife of a vagrant named Boris. And the father who made it so couldn't look at what he'd done. + +BORIS: "We need to move. It isn't safe to stay near these walls." + +NARRATOR: Ebony and Boris shuffled out of the city. Ebony did not look back. + +[SFX: CASTLE GATES GROANING SHUT] + +NARRATOR: The gates closed shut. + +--- + +[EXT. MOUNTAIN TRAIL — NIGHT] + +[SFX: WIND THROUGH PINES, FOOTSTEPS ON DIRT] + +NARRATOR: They walked in silence. Boris ahead. Ebony behind. The castle walls shrank until they were a smudge of torchlight against the dark. + +Then — slowly — she noticed something. + +The hunch was gone. Not all at once. As if each step away from the kingdom peeled something off of him. His shoulders rolled back. His spine straightened. The shuffling limp smoothed into a steady, even stride. + +His body beneath the rags wasn't starved. It was muscular — built by training, not broken by poverty. And his eyes moved constantly, scanning the tree line, reading the terrain the way a soldier catalogues threats. + +Ebony opened her mouth. The words formed in her throat — who are you? — but before they left her lips, she felt something that stopped her cold. + +A presence. From inside him. Something ancient. Something powerful. + +A dragon. + +EBONY: "That's not possible. He's a beggar. Beggars don't have dragons." + +NARRATOR: But she could feel it — unmistakable, radiating from Boris like heat from a furnace. This man — this vagrant in rags with blackened teeth and matted hair — was carrying a dragon inside him. + +EBONY: "Nova — I think he has a—" + +NOVA: "His dragon... Ebony! I know his dragon." + +--- + +[SFX: WIND. SILENCE.] + +NARRATOR: Who is Boris? Why does a vagrant move like a soldier? Why does a beggar carry a dragon? And why does Nova — an ancient spirit who has been alive for a thousand years — recognize the dragon inside him? + +To find out what happens next, listen to every episode of Princess Ebony and the Silver Dragon — available only on Pocket FM. Download the app for free now and keep listening! diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_MVS_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_MVS_v1.md new file mode 100644 index 0000000..efa4895 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_MVS_v1.md @@ -0,0 +1,398 @@ +# LEDGER — MVS "My Vampire System" · v1 (auto-harvested from source · blueprint v3) + +*First ledger for this show. Source: operator-supplied `MVS 1100.md`, harvested **eps 1–50** ("Just an Old Book" → "VR Game") in five bands. Generated by the harvest pass against Blueprint v3. All rows status **CANON** — every quote is source-verbatim, with source typos and grammar preserved (punch-up is W3's job). Cross-checked against `world_mvs.md` HARD BLOCKS; collisions are flagged in §5 and §7, not silently resolved.* + +*Provenance warning, up front: four rows in Blueprint v3 are attributed to MVS and **do not exist anywhere in eps 1–50** — slot 21's "Mr Talen, I'm sorry. I didn't realize." and Brennan's "Mr. Quinn Talen. What… what can I do for you?"; slot 22's "Don't ever reveal your secret to anybody, son… promise me you will do everything it takes."; slot 15's "thirty days to reach level three, otherwise you'll be expelled." The slot-22 line **contradicts canon** (Ep 1: the parents die off-page in the war, the book is delivered by a government agent, and Quinn never knew their faces). Treat all four as prior-promo invention until proven from a later band. See F-105.* + +--- + +## 1. THE MASTER ARC REPORT + +**PUBLIC PRICING — PRESENT, continuous, and the strongest in the catalog. Device variant, worn on the body.** + +MVS does not have a pricing ceremony; it has a **pricing instrument strapped to the wrist and never removed.** The authority installs it in Ep 3 and names it in the same breath as a kindness: *"Placed on your wrist is your lifeline… When not in use, the wristwatch will display a number - Your corresponding power level,"* (Griff, Ep 3). The formal rite (the level test, Eps 5–6) is the *installation*, not the humiliation — it happens in an empty wasteland with four peers and no crowd, and returns *"Quinn Talen, your overall current power level is that of a level 1 ability user,"* (Jane, Ep 6). + +The humiliation is that **every stranger re-runs the test for free, in one glance, forever.** The instrument is quoted being read off his body across all five bands: *"The first place the student's eyes went to was of course Quinn's watch. Seeing the low number his confidence grew."* (Ep 10) · *"Seeing the number 1 shine brightly on it"* (Ep 19) · *"the boy spotted his attacker's glowing wristwatch, which lit up brightly in the dark, displayed the number one"* (Ep 17) · *"No ability, power level 1." The watch said again.* (Ep 30) · *"Each of them had a power level 2 displayed on the watches."* (Ep 43). + +**Two structural findings that override the blueprint's default staging:** + +1. **The register is contempt, not laughter.** In 50 episodes there is no laughing-square beat aimed at Quinn. The room's verdict is *dismissal* — *"After watching the fight, many of the students were quite disappointed."* (Ep 32); *"but you will always be a weak level one."* (Momo, Ep 43). Do not import a laughing-crowd staging from the WBT/Flameborne lane. It is not in this source, and forcing it produces a wrong-show alarm. +2. **RE-PRICING — ABSENT IN PUBLIC ACROSS ALL FIVE BANDS, and canon-blocked from ever arriving.** HARD BLOCK 2 pins the watch at Level 1 permanently; it reads mutant-cell count and cannot read vampire MC. **MVS is a show whose pricing instrument is architecturally incapable of re-pricing its hero.** This is not a thin slot. It is the design. + +**What the source gives instead — four usable substitutes, in ascending order of strength:** + +- **The private verdict against the public one.** The show's whole irony engine is two screens in one frame: the watch face reading `1` where everyone can see it, and the System reading `< Congratulations you are now Level 3>` (Ep 30) where only Quinn and the audience can. Ep 30 stages both **one page apart**. +- **The true measurement spoken publicly and thrown away.** Leo, mid-spar, in a full weapons hall: *"About level 14 or 13 maybe, that's pretty good for a first-year student."* (Ep 32). The crowd reads the fight as a teacher toying with a runt and leaves disappointed. **A real re-measurement that the public refuses to register** — the single most transplantable asset in the harvest. +- **The proof seen by a hundred people and named by nobody.** The beast stone in Quinn's hand: *"The black ball started to glow, it glowed brighter than any of the balls the other students had held before."* (Ep 43). Momo registers it privately — *"How is that possible, he was able to activate the basic tier weapon fully?"* — then re-prices him **down**, out loud, seconds later. +- **The drop that lands on a wrong reading.** Loop bows in a locked empty classroom (Ep 37) and keeps a secret he has misidentified: *"I don't know why you're hiding behind that fake power level of yours"* (Ep 38). Deference, privately, from a boy who thinks he is sparing himself a murderer. + +**Ruling for W2/W3: build the promo arc PRICING → PRIVATE RE-PRICING → THE CONCEALMENT TAX.** The payoff exists, the audience gets it, and it is paid for in silence — which is resolution-withholding native to the show rather than imposed on it. The promo must **never** end on a public reveal or a moving number. The loaded gun is Ep 43: the whole hall watching the stone glow and the world declining to read it. + +--- + +## 2. HARVEST — LINES + +**SLOT 1 — THE WORLD-RULE LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Placed on your wrist is your lifeline… When not in use, the wristwatch will display a number - Your corresponding power level," | Sergeant Griff | 3 | COMPRESS | +| "True, the school might not have a written rule preventing you from associating with their kind… but there are some unwritten rules." | Momo | 14 | KEEP-VERBATIM | +| "They'll take you away in a heartbeat." | Layla | 23 | KEEP-VERBATIM | +| "I am here to tell you that this is what happens to those who do not obey." | Momo | 41 | KEEP-VERBATIM | +| "I agree the students fight all time and we purposely do nothing to stop this" | Nathan (General) | 48 | KEEP-VERBATIM | + +**SLOT 2 — THE MOCKERY-THAT-TEACHES** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "You level 1 piece of crap! When are you going to learn that you don't belong in this world?" | Schoolboy bully | 1 | KEEP-VERBATIM | +| "What the hell is a level 1 piece of rubbish like you doing?" | First-year bully | 10 | KEEP-VERBATIM | +| "You see the moment you start treating this trash like they are useful to society, they might start to get a big head." | Momo | 14 | KEEP-VERBATIM | +| "I mean how would it even be possible, he's only a level one." | Leo | 41 | KEEP-VERBATIM | +| "Wasn't he just a useless level 1?" | Momo (internal) | 43 | KEEP-VERBATIM | + +**SLOT 3 — THE SACRIFICE LINE** *(thin — narrated only, never spoken to his face, never weaponized; see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Quinn was given nothing when his parents died." | Narrated (single line) | 1 | KEEP-VERBATIM | +| "He was told that it was the only thing that his parents possessed - One that they passed down when they died." | Narrated (single line) | 1 | REVOICE | +| "The war went on for years, so he grew up not knowing what his parents looked like." | Narrated (single line) | 1 | COMPRESS | +| "Don't refuse, man. Just take it as my apology and go grab something," (friend-sacrifice substitute — ten credits, wrist to wrist) | Vorden | 16 | KEEP-VERBATIM | + +**SLOT 4 — CRUELTY-IN-COURTESY** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Looks like a few of you were able to resist the sleeping gas. Guess we'll just have to bag you." | Sergeant Griff | 3 | KEEP-VERBATIM | +| "Look I don't want to do this, but if I don't then my arse gets beat. If you're unhappy, complain to the guy who made me do this. Hand over the credits, now!" | Extorting first-year | 15 | COMPRESS | +| "Don't look so worried boy, as long as you have done nothing wrong, you have nothing to worry about." | The general | 40 | KEEP-VERBATIM | +| "so today's lesson is to throw the ball and hit the target. Simple right?" | Momo | 42 | KEEP-VERBATIM | +| "Good, see, now if you had done that in the first place, we wouldn't have had to go through all that." (after breaking five fingers) | Earl | 49 | KEEP-VERBATIM | + +**SLOT 5 — THE VICTIM-BLAMED BEAT (frame-up + shame splash)** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I can't believe you tried to help him." | Female student's friends | 1 | KEEP-VERBATIM | +| "Yeah, that guy is a monster, how could he do that?" / "Luckily the second-year students were here to stop him." | Students in the hall | 21 | KEEP-VERBATIM | +| "I see no reason for these students to be punished, if you look at the report it seems like Vorden was the first to attack the others, they were simply retaliating" | Duke (General) | 48 | COMPRESS | +| "Why should we be the ones to be punished, this is all your fault." | Earl | 49 | KEEP-VERBATIM | + +**SLOT 6 — THE PLAIN ANSWER / THE CHARGE SHEET** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I'm sorry, but I don't want it," (refusing the military's free ability book) | Quinn | 6 | KEEP-VERBATIM | +| "Why bother asking if you already know what happened?" | Quinn | 22 | KEEP-VERBATIM | +| "Then let's play some games, you've taken some of my blood, so it's only right that I take some of yours." | Quinn | 33 | KEEP-VERBATIM | +| "Why do we have these powers." Quinn said out loud, "Isn't it to protect ourselves, to fight those who harm our friends and family." | Quinn | 43 | KEEP-VERBATIM | +| "I have taken a beating my whole life and I was weak back then, what do I care if I take another beating now." | Quinn | 43 | KEEP-VERBATIM | + +**SLOT 7 — THE DEADPAN ACCEPTANCE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I bet you don't even know how many fingers I'm holding up!" | Quinn | 1 | KEEP-VERBATIM | +| "Would I like to level up? Why even bother asking," | Quinn | 17 | KEEP-VERBATIM | +| "This is going to hurt." (alone in a bathroom, about to pull two blades out of himself) | Quinn | 33 | KEEP-VERBATIM | +| "What a waste." (over a bleeding unconscious opponent whose blood he can't take in public) | Quinn | 30 | KEEP-VERBATIM | +| "No point wasting good exp," | Quinn | 45 | KEEP-VERBATIM | + +**SLOT 8 — THE ALL-IN WAGER** *(thin — no public stakes-both-sides in 50 eps; see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Me and you both know you're not going to hurt him Quinn." Momo said, "If you attack too deep and kill him, you'll be in trouble, attack too shallow and we will pounce on you and make you wish you were dead." | Momo | 45 | KEEP-VERBATIM | +| "What are you guys doing, to anyone who manages to hit or capture that guy they will be free from any form of punishment!" (a public bounty on the hero) | Momo | 43 | KEEP-VERBATIM | +| "Fine, I will keep this as a secret but only on one condition." | Layla | 23 | COMPRESS | +| "It's a deal," Quinn said as the two of them shook hands. | Quinn | 23 | KEEP-VERBATIM | + +**SLOT 9 — THE COST-OF-BEING-RIGHT** *(the ACT→PUNISHMENT engine — eps 41–50 are the densest stretch in the harvest)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "A student by the name of Quinn Talen doesn't want to accept the ability book. I await instructions on how to deal with this outlier," | Jane (into earpiece) | 6 | KEEP-VERBATIM | +| "Um excuse me, but does any of the teachers know about this?" (asked; then beaten unconscious for asking) | First-year student | 42 | KEEP-VERBATIM | +| "I… I can't," She said. (refuses to throw a stone at a crucified classmate; takes the stone in her own stomach) | The girl with brown hair | 42 | KEEP-VERBATIM | +| "What the hell do you think you were doing, calling the teacher the other day." Earl said, "Now Momo and the others are giving us a hard time for relying on you." | Earl | 49 | KEEP-VERBATIM | + +**SLOT 10 — THE WITNESS LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "You're a Vampire, aren't you?" | Layla | 22 | KEEP-VERBATIM | +| "About level 14 or 13 maybe, that's pretty good for a first-year student." (the one true public measurement; nobody registers it) | Leo | 32 | KEEP-VERBATIM | +| "What is this? For this much blood, the wounds should be a lot bigger." | Hayley | 47 | KEEP-VERBATIM | +| "She won't be alone," (three words, arrow already loosed) | Layla | 43 | KEEP-VERBATIM | + +**SLOT 11 — THE UNCONDITIONAL LINE (incl. reciprocal vow)** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Quit talking nonsense you two, we're friends. I don't care about this stupid power level hierarchy going on." | Vorden | 13 | KEEP-VERBATIM | +| "If you need to feast on someone, then feast on me." | Layla | 23 | KEEP-VERBATIM | +| "Run, I'm sorry this is all my fault," (shoving his own betrayer clear of the ambush the betrayer arranged) | Vorden | 44 | KEEP-VERBATIM | +| "Hey Peter, you know if something is up, tell me I will help you out," (said to the same betrayer, again, five eps later) | Vorden | 49 | KEEP-VERBATIM | +| "Do you need some blood?" Layla whispered. | Layla | 46 | KEEP-VERBATIM | + +**SLOT 12 — THE CLIFF LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Have I become a vampire?" he mumbled to himself. (the cliff turned inward) | Quinn | 18 | KEEP-VERBATIM | +| "You monster, get off of him!" (caught mid-bite, masked; episode ends) | Loop | 34 | KEEP-VERBATIM | +| "Hmm, just what are you hiding Quinn?" | Leo | 30 | KEEP-VERBATIM | +| "How is that possible, he was able to activate the basic tier weapon fully?" | Momo (internal) | 43 | KEEP-VERBATIM | +| "I don't know why you're hiding behind that fake power level of yours" | Loop | 38 | KEEP-VERBATIM | + +**SLOT 13 — THE POWERSTART CANDIDATE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "A weak sorry escaped his lips… as he bit into her neck." | Narrated (single line) | 19 | KEEP-VERBATIM | +| "Report, confirming the time of death 9:30 PM, a first-year student named, Brandon Richardson." (flashforward cold open — a named boy dead, then rewind) | Hayley | 36 | KEEP-VERBATIM | +| "She remembered everything." | Narrated (single line) | 21 | KEEP-VERBATIM | +| "so today's lesson is to throw the ball and hit the target. Simple right?" (the "target" is a boy) | Momo | 42 | KEEP-VERBATIM | +| "Why is the world so unfair?" | Quinn | 1 | KEEP-VERBATIM | +| "" (interrupted at the crucial word — opener AND cliff) | System | 1 | KEEP-VERBATIM | + +**SLOT 14 — THE TYRANT'S COMMAND** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "This is where the lot of you will spend the next two years of your life," | Sergeant Griff | 3 | KEEP-VERBATIM | +| "Hand over the credits, now!" | Extorting first-year | 15 | KEEP-VERBATIM | +| "Get her out of here," Momo said. "Next!" | Momo | 42 | KEEP-VERBATIM | +| "Just nod if you agree." | Earl | 49 | KEEP-VERBATIM | +| "I'm afraid you will have to follow these men; they have a few questions they would like to ask you." | Leo | 40 | KEEP-VERBATIM | + +**SLOT 15 — THE DEATH CLOCK** *(fully stocked from Ep 17 on — needs no authorship)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Your HP will decrease by -1 HP every hour until you have consumed human blood!" | System | 17 | KEEP-VERBATIM | +| "< Your hunger grows >" | System | 31, 33 | KEEP-VERBATIM | +| "Quinn still didn't know what happened when his HP would reach 0 but at the same time, this wasn't the time to find out." | Narrated (single line) | 45 | COMPRESS | +| "It's best to ask your students to pack some sun cream and their sunglasses as they will be arriving on the planet Caladi," (a 72-hour daylight cycle, announced as a packing list, to a boy whose stats halve in the sun) | Nathan (General) | 48 | KEEP-VERBATIM | + +**SLOT 16 — THE FALSE WORLD-FACT** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Are you sure, you have not accidentally grabbed a fantasy book about vampires?" (the truth delivered as the punchline) | Vorden | 9 | KEEP-VERBATIM | +| "No ability, power level 1." The watch said again. (spoken by the machine minutes after he beat a Level 3) | Leo's watch | 30 | KEEP-VERBATIM | +| "Throughout all of the history of abilities, there had never been any reports of an ability where someone had to consume something to gain power. The power had always come from within." | Narrated (single lines) | 36 | REVOICE | +| "but you will always be a weak level one." | Momo | 43 | KEEP-VERBATIM | +| "He's telling the truth." (the lie-detector certifying the killer) | The truth-detecting woman | 41 | KEEP-VERBATIM | + +**SLOT 17 — THE CONCEALMENT TAX** *(the deepest slot in the harvest — this is the show's engine)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I don't have an ability." (buying a Level 1 rating on purpose, with the answer in his pocket) | Quinn | 6 | KEEP-VERBATIM | +| "Yeah, I just get hot easily," Quinn lied. (the sun penalty explained away to his friends' faces) | Quinn | 13 | KEEP-VERBATIM | +| "Falling on his knees, he tried his best to refrain from screaming, afraid he might alarm someone." (the Halfling evolution swallowed silently) | Narrated (single line) | 17 | COMPRESS | +| "he used a rag of ripped cloth from his old uniform and wrapped it around his watch to hide his power level" | Narrated (single line) | 34 | COMPRESS | +| "It was a shame Quinn wasn't able to store or drink Brandon's blood. After all, everyone was watching" (the tax priced exactly: one stat point, forfeited) | Narrated (single line) | 30 | REVOICE | +| "No I'm fine, I'm not in any danger, don't worry about that, I just don't want to reveal anything in front of all these people." (bleeding out, refusing the blood that would save him) **· TRIGGER CONDITION:** Fires ONLY in response to CONCERN FOR HIS SAFETY (a "you'll get hurt / are you okay" beat). NEVER answers an accusation of skill/training/cheating. Requires a preceding concern line. | Quinn | 46 | KEEP-VERBATIM | + +**SLOT 18 — THE IMPOSSIBLE ACCEPTANCE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Who cares? YES!" (answering "any changes will be irreversible?" — the waiver signed unread) | Quinn | 17 | KEEP-VERBATIM | +| "Pick me! I don't mind having a little try." Quinn said with a smile. (a Level 1 volunteering into eight second-years, into total silence) | Quinn | 42 | KEEP-VERBATIM | +| "Please, would you be able to teach me how to fight?" Quinn asked as he bowed down. (thrown around like a rag doll in front of the school, then bows and asks for more) | Quinn | 32 | KEEP-VERBATIM | +| "I want you to make me a Vampire." | Layla | 22 | KEEP-VERBATIM | + +**SLOT 19 — THE OVERHEARD VERDICT / THE SERVANT'S WHISPER** *(MVS runs this slot INVERTED — see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Let's see how long you can survive in this cruel world, Quinn," (a man Quinn will never meet, deciding his odds alone) | Unnamed superior | 6 | KEEP-VERBATIM | +| "I think I'll just head back and wait by the school gate, see if there are any more suckers I can leach some credits from." (the villain confesses one shelf away from the hidden hero) | Rylee | 16 | KEEP-VERBATIM | +| "Would you two calm down," (half a conversation, no second voice, overheard around a corner) | Vorden | 24 | KEEP-VERBATIM | +| "Of course, as long as no one finds out about our little secret," Duke said with a smile. (the assembly-hall torture was ordered by a General) | Duke (General) | 47 | KEEP-VERBATIM | +| "Tch, filthy scum," Duke said under his breath. | Duke (General) | 48 | KEEP-VERBATIM | + +**SLOT 20 — THE WRONG EXPLANATION** *(second-deepest slot; the show runs on it)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "He can't be planning to...to... kiss him?!" (the witness invents the most degrading possible reading of a feeding attempt) | Layla (internal) | 18 | KEEP-VERBATIM | +| "Unless, it has to be it, he cheated and used an ability." | Fei | 30 | KEEP-VERBATIM | +| "Hey General, I believe there might be a stray beast roaming around the school." (the institution's official theory of the bite marks) | Hayley | 36 | KEEP-VERBATIM | +| "I don't know why you're hiding behind that fake power level of yours but please, I just don't want to get involved and I'll stay out of your way." (ally variant — the confidant confides the WRONG theory) | Loop | 38 | KEEP-VERBATIM | +| "Oh another healer." Hayley said surprised, "Well if you get the chance send them down here, their ability is quite good" | Hayley | 47 | KEEP-VERBATIM | + +**SLOT 21 — THE RECOGNITION DROP** *(canon-BLOCKED for Quinn — never fires for him in 50 eps; rows below are the misdirected and private variants only)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I'm sorry about yesterday," Loop said as he bowed. (the drop, private, one witness, empty classroom) | Loop | 37 | KEEP-VERBATIM | +| "I Promise I won't tell anyone about your secret, please whatever you do just let me live." | Loop | 37 | KEEP-VERBATIM | +| "Do you not know who he Is, Perhaps if I told you his war name you would know. This man is Sergeant Leo, or known as the Blind swordsman." (a textbook drop rig with the wrong name in the slot — Quinn watches someone else get recognized) | Erin | 30 | KEEP-VERBATIM | +| "Anyone else but her," (the torturer collapsing into deference mid-atrocity — to rank, not to hidden identity) | Momo | 47 | KEEP-VERBATIM | + +**SLOT 22 — THE DEATHBED CHARGE** *(variant only — the recorded posthumous instruction; no parent speaks in 50 eps)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I don't know how much time has passed but if you have come across this video, that means you're one of us." | The blonde man (system tutorial) | 39 | KEEP-VERBATIM | +| "Good luck my friend and I wish you all the best." | The blonde man | 40 | KEEP-VERBATIM | +| "But it was hard for Quinn to remember meeting anyone like the man in the video. He didn't even know what his parents faces looked like that well." | Narrated (single lines) | 40 | COMPRESS | +| "Another failure. Why won't you open? Why did mum and dad even have this thing?" (grief addressed to the inheritance, on attempt 112) | Quinn | 1 | KEEP-VERBATIM | + +--- + +## 3. HARVEST — IMAGES + +| Class | Image, verbatim-anchored | Ep | Flag | +|---|---|---|---| +| A | The rescuer who un-rescues: she reaches the wall, sees whose face it is, and "instantly backed away and continued on with her business as if nothing happened" | 1 | KEEP-VERBATIM | +| A | The glance that prices him before he speaks: "The first place the student's eyes went to was of course Quinn's watch. Seeing the low number his confidence grew." | 10 | KEEP-VERBATIM | +| A | The canteen sorting itself by number, and the friend hiding his own price with his sleeve — "making sure to cover up his wristwatch most of the time" | 12–13 | KEEP-VERBATIM | +| A | The boy renamed as equipment: "And what do they mean by the target, the board it's so thin, they're basically telling us to hit him." | 42 | KEEP-VERBATIM | +| B | **The origin chain, four links, causally airtight:** the taped glasses break → "one of the shards of plastic even created a deep gash in his thumb" → "a drop of blood from his thumb landed on top of the book" → "the book began to float," *The poverty causes the wound causes the power.* | 1 | KEEP-VERBATIM | +| B | The chipped tooth he broke feeding the hunger he just got: "The smell of blood from the chipped off tooth was strong and intoxicating" | 18 | KEEP-VERBATIM | +| B | The twig that saves the secret: "her foot had landed on a small twig and a snapping sound was heard" — and she never hears it herself | 18 | KEEP-VERBATIM | +| B | The throw everyone in the hall has already scored: "Instead of the ball hitting Vorden though like everyone suspected, it landed straight in the student's stomach standing by the side of the board." | 43 | KEEP-VERBATIM | +| C | The price read aloud and typed in: "Strength 5," Jane announced and noted it down on her tablet → "your overall current power level is that of a level 1 ability user," | 6 | KEEP-VERBATIM | +| C | The humiliation performed as a wrist transaction: "He placed his watch on the other boys and the credits got transferred over." | 15 | KEEP-VERBATIM | +| C | Collar-grabbed in the breakfast queue while "there were many guards standing in each corner of the room but not a single one had done anything to help" | 19 | KEEP-VERBATIM | +| C | The price made countable, one stone per classmate: "There were more than enough stones there for each student to throw at least one ball at Vorden." | 42 | KEEP-VERBATIM | +| D | The inheritance, described once and then gone forever: "a large and thick hard-bound book, weighing about half a kilo… a colour that mimicked a lighter shade of blood" — with four separated fangs on the cover | 1 | KEEP-VERBATIM | +| D | The melted ice cream: "the ice cream he had bought had already melted, but for some reason when he looked at it, it no longer looked so appetizing" — the last thing he wanted as a human, spoiled the hour he stopped being one | 18 | KEEP-VERBATIM | +| D | The corked test tube of a friend's blood, quietly going bad: "it still wouldn't delay the process of it being spoiled for long" | 31 | COMPRESS | +| D | The hoarded reserve nobody may ever see: "" | 47 | KEEP-VERBATIM | +| E | **The two-screen image — the whole show in one frame:** the wristwatch reading `1` in public against "< Congratulations you are now Level 3>" one page apart | 30 | KEEP-VERBATIM | +| E | The tax itemised the moment he steps outdoors: "[Your body is being hit by direct sunlight]" / "[All stats will be halved while you are exposed to the sunlight]" | 3 | KEEP-VERBATIM | +| E | The clock made arithmetic in the middle of a school day: "1/15 HP" | 19 | KEEP-VERBATIM | +| E | A person converted into a stat: "< A + Blood type has been consumed > < + 1 Strength stat >" | 34 | KEEP-VERBATIM | +| F | The self-imposed kneel: "Falling on his knees, he tried his best to refrain from screaming, afraid he might alarm someone" | 17 | KEEP-VERBATIM | +| F | The kneel inverted, in public: "Layla then suddenly got out of her seat and started to bow down to Quinn on her knees" — in a full library | 23 | KEEP-VERBATIM | +| F | The bully bows to the Level 1: "I'm sorry about yesterday," Loop said as he bowed | 37 | KEEP-VERBATIM | +| F | The perverse kneel — the healer kneeling so the breaking can continue: "Do your thing Jerry." | 49 | KEEP-VERBATIM | +| G | **The free book as the leash:** "F-for me? You're just giving this to me for free?!" (Ep 5) against "This way, all those students like Peter would suddenly become indebted to the military" (Ep 6) — the gratitude and the trap in the same object | 5–6 | KEEP-VERBATIM | +| G | The first kindness of Quinn's life is also the first attempted theft: the outstretched hand, and simultaneously "[Use of an ability has been detected]" | 4 | KEEP-VERBATIM | +| G | The betrayal made ordinary: "Peter had asked Vorden to go with him to the assembly hall to help him further practice." → "the second-year students including Momo were hiding waiting for him." | 44 | KEEP-VERBATIM | +| G | Healing weaponised — the gift that exists only to extend the torture: "He grabbed Peter's fingers again and repeated the process again and again." | 49 | KEEP-VERBATIM | +| H | *(thin — see thin-slot report)* The good day beaten out of him: "He felt like any second now he was going to throw up the ice cream he had just eaten with the other two." | 49 | KEEP-VERBATIM | +| H | His own shirt used to silence him: "One of the students then ripped a part of his shirt and shoved it into Peter's mouth." | 49 | KEEP-VERBATIM | +| H | Inverted (the kind adult destroys the evidence): "Oh, I got rid of those two marks for you" — the only proof of the bite, removed as a courtesy | 22 | KEEP-VERBATIM | + +--- + +## 4. HARVEST — EXCHANGE SHAPES + +**a) The volunteer inversion** (Eps 42–43) — flag KEEP-VERBATIM. **The single strongest shape in the harvest.** +Tyrant calls for a volunteer to stone the hero's friend → total silence → the weakest boy in the room volunteers, *smiling*: "Pick me! I don't mind having a little try." → he states his reason to the hall: "Why do we have these powers… Isn't it to protect ourselves, to fight those who harm our friends and family." → "I have taken a beating my whole life and I was weak back then, what do I care if I take another beating now." → the throw, and the aim is wrong on purpose: "it landed straight in the student's stomach standing by the side of the board." → "What the hell are you guys doing standing there, get him!" +*(ACT→PUNISHMENT with the act unmistakable on first hearing, and the punisher able to cite it. Textbook.)* + +**b) The keeper's bargain** (Eps 22–23) — flag KEEP-VERBATIM. *(New shape candidate — the secret-identity lane's counterpart to the poisoned offer.)* +"What happened at the library, what did you do?" → stonewall: "Why bother asking if you already know what happened?" → the witness names it: "You're a Vampire, aren't you?" → refusal: "I'm not a vampire, I became like this from an Ability book." → **her counter-terms**: "Fine, I will keep this as a secret but only on one condition." → "If you need to feast on someone, then feast on me." → "It's a deal," Quinn said as the two of them shook hands. +*(The blackmail scene that turns into devotion — more disturbing than extortion would have been.)* + +**c) The wrong-explanation pile-on** (Ep 30) — flag KEEP-VERBATIM. Near-identical to the blueprint's canonical shape, source-verbatim. +A bare fist slices a beast weapon in half → Brandon: "What the, my weapon, it's faulty!" → the room adopts it: "Brandon obviously was using a faulty weapon." → escalation: "Unless, it has to be it, he cheated and used an ability." → the authority's flat refusal: "And I'm telling you now, Quinn didn't use a single ability." → the witness discredited: "He's blind?" + +**d) The accidental-truth laugh-off** (Ep 9) — flag KEEP-VERBATIM. **The most MVS-native shape in the source.** +The disguised confession: "Have you ever heard of an ability that is weaker in sunlight?" → the laugh: "What are you, crazy? I've never heard of something like that." → the world-law recited: "Abilities are something our bodies learn." → the punchline that is the answer: "Are you sure, you have not accidentally grabbed a fantasy book about vampires?" → the tax paid in silence — he lets it go. + +**e) The apology ladder → the flipped cliff** (Ep 37) — flag KEEP-VERBATIM. *(The recognition drop, private, ending on the hero's ignorance.)* +Loop, bowing: "I'm sorry about yesterday," → "I Promise I won't tell anyone about your secret, please whatever you do just let me live." → Quinn, bluffing blind: "Thanks for keeping my secret, besides I don't really have a grudge against you." → Loop: "Thank you, thank you for sparing me," → "I just don't want what happened to Brandon happening to me." → Quinn: "Brandon?" … "What happened to Brandon?" +*(The deference ladder climbs three rungs, then the last rung breaks under the hero — he is being thanked for a murder he hasn't heard about.)* + +**f) The forced-participation ladder** (Ep 42) — flag KEEP-VERBATIM. +Order → refusal → the refuser punished → next → compliance → the compliant one *praised*: "Alright then, you the girl with the brown hair, you go first." → "I… I can't," → "Really, well if you can't then we have no choice," → the ball into her stomach → "Get her out of here," Momo said. "Next!" → the next boy throws, Vorden coughs blood → "You see that, now that was perfect, that is exactly how everyone should throw the ball." + +**g) The half-conversation overheard** (Ep 24) — flag KEEP-VERBATIM. *(New shape candidate — cheap in audio, extremely legible on first hearing.)* +Peter rounds a corner → one voice, alone: "Would you two calm down," → **pause where the reply should be** → "I don't care if he hurt the little one's feelings…" → **pause** → "Look, if you get involved and hurt them, I won't forgive you. I won't let something like last time happen again." → Peter peeks: "still the only person he could see was Vorden." +*(The absent second voice does the entire dramatic job. Executes HARD BLOCK 6 perfectly — never named, never explained.)* + +**h) The alibi-of-contempt** (Ep 41) — flag KEEP-VERBATIM. *(New shape candidate; not in the blueprint index.)* +The hero is acquitted by the world's low opinion of him. The instrument works; the *interpretation* saves him. "Now tell me, did you kill Brandon Richardson last night?" → "No, I did not." → "He's telling the truth." → "I mean how would it even be possible, he's only a level one." → "It looks like we no longer have any leads." + +**i) The apologetic-extortion ladder** (Ep 15) — flag KEEP-VERBATIM. +"Lucky us, to meet some of the few level 1s in this whole school. Hand over ten credits each and we'll let you head inside." → "But that's all the credits we have." → "Look I don't want to do this, but if I don't then my arse gets beat… Hand over the credits, now!" → the wrists touch, the credits move. +*(The pricing collected by someone who is himself priced.)* + +**j) The reversible-torture loop** (Ep 49) — flag KEEP-VERBATIM. *(New shape candidate — healing as the torturer's tool.)* +"Just nod if you agree." → [Peter shakes his head] → fingers broken one by one → "all five of Peter's fingers had broken and Peter still hadn't agreed" → "Hey Jerry, get over here." / "Do your thing Jerry." → the bones re-form → "He grabbed Peter's fingers again and repeated the process again and again." → "Good, see, now if you had done that in the first place, we wouldn't have had to go through all that." + +**k) The kindness that triggers the bite** (Ep 19) — flag KEEP-VERBATIM. +The last useless book closes → Layla is standing there → "Are you okay?" → hand on the forehead → "You're so cold? Do you want me to take you to the nurse's office?" → "Quinn hadn't heard a single word she had said." → "A weak sorry escaped his lips… as he bit into her neck." +*(The only person who offers help becomes the meal. Four turns, zero villain.)* + +--- + +## 5. THE THIN-SLOT REPORT (authorship map) + +- **PUBLIC RE-PRICING — canon-BLOCKED, not thin.** HARD BLOCK 2 pins the watch at Level 1 forever. No skeleton may stage "the number jumps and the room goes silent." Substitutes are ranked in §1; the Ep 43 glowing stone is the best. +- **SLOT 21 — RECOGNITION DROP: EMPTY for Quinn across 50 episodes.** Nobody ever defers to him for who he is. The mechanic demonstrably works in this world — it fires for Vorden's displayed 5 (Ep 19, *and it's a bluff*), for Leo's war name (Ep 30), for Fay's rank (Ep 47) — which makes the withholding pointed. **Stage the drop as withheld promise, never as event.** Loop's private bow (Ep 37) is the only version the show permits, and it rests on a wrong reading. +- **SLOT 22 — DEATHBED CHARGE: EMPTY, and canon-contradicted.** No parent speaks in eps 1–50. The parents die off-page in the war; the book arrives via a government agent; *"he grew up not knowing what his parents looked like"* (Ep 1). The recorded-elder variant (Eps 39–40) is the honest substitute — a message left for a stranger by someone probably long dead. **The blueprint's MVS-attributed line "Don't ever reveal your secret to anybody, son…" is not canon here and collides with Ep 1.** +- **SLOT 3 — SACRIFICE LINE: EMPTY as scene, narrated-only as fact.** No family gift, no hoarded cost, nothing weaponized by a villain, nobody ever mentions his parents to his face in 50 episodes. The functional substitute the source does supply is friend-sacrifice: Vorden's ten credits (Ep 16), Layla's standing blood offer (Eps 23, 46), Peter's five fingers (Ep 49). W3 authors or transplants. +- **SLOT 8 — ALL-IN WAGER: no public stakes-both-sides anywhere in 50 eps.** The closest is Momo's *no-win* wager (Ep 45) — both outcomes named, both punish — which is arguably a better fit for this show than a symmetrical bet. The Layla bargain (Ep 23) has terms and a handshake but no audience and no death on the table. +- **SLOT 19 — OVERHEARD VERDICT: runs INVERTED, and this is an asset, not a defect.** MVS's hero carries almost no overheard truth; the **audience** carries it. Duke's "our little secret" (Ep 47) and the leaders' meeting (Ep 48) are given straight to the listener — Quinn will never learn a General ordered the torture. Stage as dramatic irony, or re-stage as a physical overhear. +- **SLOT 10 — WITNESS LINE: thin by design through Ep 21.** Layla sees everything and says nothing aloud for ten episodes; every early witness beat is interior. The slot opens at Ep 22 and is well-stocked after. +- **IMAGE CLASS H — DESTROYED TOKEN: no canonical instance.** No bully destroys the hero's love-object in public. Every candidate is self-inflicted (the glasses, Ep 1) or displaced onto Peter (Ep 49). Ask the operator before staging class H. +- **The register warning, restated because it will be the most common wrong-show error:** MVS prices with **contempt and dismissal**, never with laughter. There is no laughing square in this source. +- **Structural:** build **PRICING → PRIVATE RE-PRICING → THE CONCEALMENT TAX**, which the source supports verbatim end to end, and which satisfies resolution withholding by canon rather than by restraint. + +--- + +## 6. FREE HARVEST (≤10) + +1. **"Let's see how long you can survive in this cruel world, Quinn,"** (unnamed superior, Ep 6) — an unseen man in a chair, on a file, alone. The show's real danger (HARD BLOCK 3) in nine words, better than any villain line in the source. +2. **"Evolution? What the fuck!"** (Quinn, Ep 17) — canon profanity landing exactly where the audience is. The reaction shot of the entire premise. +3. **"I want you to make me a Vampire."** (Layla, Ep 22) — the reveal scene's payoff is not a threat but a fan request. Funny and unsettling in the same breath. +4. **"I don't know whether it's a good thing or a bad thing that I'm finding it easier every time I do this."** (Quinn, Ep 36) — said with a boy's face inches from his own. The moral spine of the run. +5. **"What a waste."** (Quinn, Ep 30) — three words over a bleeding classmate, showing the System eating his moral floor with no horror-narration at all. +6. **"Of course, as long as no one finds out about our little secret," Duke said with a smile.** (Ep 47) — retroactively recontextualises the whole assembly-hall sequence. The bully was doing homework for a General. +7. **"Since when has this world ever been fair? Blame the people at the top for not looking out for us."** (Rylee, Ep 26) — the injustice engine handed to a low-level bully who is right about the diagnosis and wrong about the treatment. +8. **"Another one?" Hayley sighed** (Ep 20) — two words that build an institution processing damaged children on a conveyor belt. +9. **"Each one of them was dealing with their own problems, yet not one of them knew of the others."** (narrated, Ep 37 — REVOICE) — three boys, three secrets, one dorm room, lights out. +10. **"It's best to ask your students to pack some sun cream and their sunglasses"** (Nathan, Ep 48) — a death sentence for a Halfling, delivered as a packing list. Best cliff-forward in the harvest. + +--- + +## 7. HARD BLOCK CROSS-CHECK + +| # | Block | Status | Note | +|---|---|---|---| +| 1 | No delivered public reveal | **HOLDS — two near-misses to watch** | Ep 45: claws out in a hall of ~100 ("kept one of his claws towards the student's neck"). The source doesn't treat it as a reveal, but **staging it visually reads as a delivered tell — keep the claw off-frame.** The permitted form is already in the source and is better: "The problem was Quinn had already displayed abnormal strength. If he then displayed abnormal healing, things wouldn't add up." (Ep 45) | +| 2 | Watch permanently reads Level 1 | **HOLDS, reinforced 5× on the page** | Best evidence: Ep 30, system Level 3 and the watch still answers "No ability, power level 1." Quinn *wraps* the watch in cloth (Ep 34); he never removes or upgrades it. **A promo that takes the watch off breaks the block.** Add to the world doc: the watch is also confirmed as a **tracker/injury-ping** (Eps 26, 36). | +| 3 | Exploitation + surveillance, not a vampire hunt | **HOLDS** | Ep 23 states it outright; Hayley's "stray beast" theory and the Ep 40 interrogation are the surveillance thread exactly as canon frames it. Do not escalate into a hunt doctrine. | +| 4 | The book is gone | **HOLDS** | Confirmed in Quinn's own mouth: "When I learnt the ability the book simply vanished." (Ep 23). Voiceable, never showable. Ep 39–40's tutorial arrives through the System, not the book. | +| 5 | Activation requires Quinn's own blood | **HOLDS** | Ep 1's causal chain (glasses → shard → thumb → drop) is canon *and* the best image in the harvest. No substitute needed. | +| 6 | Vorden's personalities are a private secret | **HOLDS, executed perfectly at Ep 24** | Run every council line unattributed, as behavioural shift. "Finally, I, Raten, have returned." (Ep 44) and "My name is not Vorden either!!" (Ep 34) are the maximum permissible tells. Never add a system-explanation. | +| 7 | Adults do not protect the weak | **HOLDS — with one pairing requirement** | Fay (Sergeant) *does* stop the torture by force at Ep 46–47. **If the Fay rescue is used, the Ep 48 leaders' meeting must be used with it** — where the adults convene, decline to punish anyone, and name an Original family's reputation as the only real stake ("Tch, filthy scum"). Otherwise the promo asserts the institution protects children and the T2 injustice tier dies. | + +**MVS-DR contamination:** none. No Amy, Lancy, Noir, Pureblood, Talen Clan, Boneclaw, or Fex anywhere in eps 1–50. + +**Two dating corrections for `world_mvs.md`:** +1. **Leo's aura-read of Quinn is dated ~Ep 95 in Layer 2. It actually opens at Ep 30** — "it reminded him of an aura of that of the beasts or the Dalki had, one that wasn't human" → "Hmm, just what are you hiding Quinn?" The suspicion loop is available *inside the entry window*, 65 episodes earlier than the file says, and is materially cheaper to promo. +2. **The entry map dates the assembly-hall torture at ~Ep 44.** There is an earlier assembly-hall beating of Vorden by second-years at **Ep 21**, with the crowd frame-up attached. Either two incidents exist or the Ep 44 dating covers only the second — operator ruling needed before any promo cites "the assembly hall." + +**Prior-promo provenance flag:** Eps 28–30 is plainly the source behind the shipped **"Weapon Selection"** promo cited in Blueprint v3. The source names **Loop** as Brandon's friend in the crowd, not the defeated opponent — the promo swapped them. Do not count that band as fresh territory without checking against the shipped asset. + +**Source-error inventory (harvested as-is; know they're errors):** Rylee's Inspect reads **"Rylee Blade"** (Ep 17), the same surname as **Vorden Blade** — almost certainly a slip; quoting the full name would imply a family link that is not canon. Also: "Mono" for Momo (15) · "Layle" for Layla, "Riley" for Rylee (18) · "Quin" (37) · "Vordan" (34) · "Voden" (50) · "Haley"/"Hayley" both (33, 36) · "reviling" for revealing (37) · "complexly" for completely (46) · "head" for heed (42) · "lacky" (33) · "sought of" for sort of (32) · "not nobody else had decided to sit" (13) · the System's irreversibility warning ends in a stray question mark (17). + +--- + +## FINDINGS (standing enforcement — seeded) + +| ID | Note | Status | Enforcement | +|---|---|---|---| +| F-101 | No pipeline run on this ledger yet; the thin-slot report above is the standing authorship map | OPEN | First W3/W4 run ships its checklist against this ledger, every row placed or declined-with-reason; W5 appends findings | +| F-102 | Promo arc shape ruled by the master arc report | OPEN | The build runs PRICING → PRIVATE RE-PRICING → CONCEALMENT TAX and ends with the watch still reading 1; checklist verifies by quote | +| F-103 | MVS prices with contempt, never laughter | OPEN | No laughing-crowd staging may enter a skeleton; W2 wrong-show alarm fires on "the square laughed" imports from the WBT/Flameborne lane | +| F-104 | Slot 21 is canon-blocked; the recognition drop is a withheld promise | OPEN | Any skeleton staging a public drop for Quinn is a HARD BLOCK 1+2 break, not a stretch; W2 must decline it in writing | +| F-105 | Four Blueprint v3 rows attributed to MVS are not canon in eps 1–50; one contradicts Ep 1 | OPEN | Do not harvest from them. Operator ruling requested: retire from Blueprint v3, or annotate as prior-promo invention | +| F-106 | Fay's Ep 46–47 rescue must ship paired with the Ep 48 leaders' meeting | OPEN | W2/W3 verify by quote; an unpaired rescue inverts the T2 injustice tier and is a HARD BLOCK 7 break in effect | +| F-107 | Two world-doc dating errors (Leo's aura-read; the assembly hall) and one addition (the watch is a tracker) | OPEN | Operator ruling requested before `world_mvs.md` is amended | +| F-108 | Harvest span is eps 1–50 by operator ruling; eps 51–99 unharvested | OPEN | Late-run assets (portals ~59, bloodsucker form ~80, shadow ability ~89, Big Four ~95) are tease-only until a v2 harvest covers them | +| F-109 | **"MIDNIGHT" ANGLE — operator ruling: DELIVER the public reveal cliff** (Loop tears the mask off; Quinn's face + fangs on the course cameras). Consciously OVERRIDES HARD BLOCK 1 + F-102 for this angle ONLY. | RESOLVED (angle-specific exception) | The general no-public-reveal doctrine still governs every other MVS angle; Midnight is a logged, deliberate exception. W2/W3/W4 build the mask-off reveal cliff as written in the operator blueprint (`MVS Midnight.csv`). | +| F-110 | **Trigger-condition mismatch class (RBM "Don't call it a gift" + MVS Ep 46):** a harvested line's trigger condition must name the SPEECH-ACT it answers (concern / accusation / offer / threat), not just the scene. W3 arms it; W4 Station 3 verifies the placed line answers that exact speech-act — a line answering the wrong speech-act is a defect even if it's in the right scene. | OPEN | W3 trigger conditions name the speech-act answered; W4 Station 3 verifies each harvested line answers its named speech-act. The Ep 46 line CANON-answers concern for his safety, not an accusation of skill/training — see SLOT 17 trigger condition. | diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_PH_v2.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_PH_v2.md new file mode 100644 index 0000000..52d6af6 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_PH_v2.md @@ -0,0 +1,234 @@ +# LEDGER — PH "The Primal Hunter" · v2 (auto-harvested from source · blueprint v3) + +*Replaces Ledger_PH_CastOutTwice_v1 (deprecated per operator ruling — no rows carried over; every row below is source-verbatim). Source scope: Book 1, Chapters 1–12 (office → introduction → tutorial forest → group split), ~156k chars, stopped at the Ch 12/13 boundary. Generated by the harvest pass against Blueprint v3. All rows status **CANON**. System/interface text harvested as SYSTEM speaker.* + +--- + +## 1. THE MASTER ARC REPORT + +**Beat 1 — PUBLIC PRICING: PRESENT BUT WEAK (device variant only; no laughter instrument).** The source prices Jake at the bottom, but *privately and administratively*, not publicly to mockery. Best candidates: + +- Device: **"Human (G) – The lowest level of humans in the system."** (SYSTEM, Ch 2) — the system literally names him lowest on first contact; his opening status screen shows single-digit stats across the board (Str 7, Willpower 6, Ch 2). +- Device (self-priced): **"He wasn't an extraordinary person, but just another face in the crowd."** (narration, Ch 1 office scene) — the pricing is anonymity, not ridicule. +- Social pricing inversion: the group prices him as *dangerous*, not worthless — **"What the fuck is wrong with you?"** (Jacob, Ch 6) and **"But to just murder someone…"** (Caroline, Ch 10). + +**No gatekeeper variant, no rite variant, and critically NO public laughter beat exists in this span.** Nobody laughs at Jake; the world simply doesn't see him. If the promo needs the crowd-laughs-then-goes-silent engine, the laughter half is **W3 authorship territory** (the raw material — his mediocre status screen, the "lowest level of human" tag, Richard not even noticing him — is harvested below). + +**Beat 2 — RE-PRICING: PRESENT AND STRONG (two instruments).** + +- Device: **"*Bloodline Awakened*: [Bloodline of the Primal Hunter (Bloodline Ability - Unique)] – Dormant power lies in the very essence of your being. A unique, innate ability awakened in the Bloodline of the newly initiated human, Jake Thayne."** (SYSTEM, Ch 9) — the same system that called him "lowest level of human" now writes his personal name into a Unique ability. The classification-cycling beat, native. +- Human instrument: the Richard standoff (Ch 12) — the veteran leader ends it by raising a hand to stop his own bowman, and **"Jake made the exact same motion. The other men appeared stunned by the revelation that he could still see them with his back turned."** Plus the two-word verdict: **"What… what happened?" / "I won."** (Ch 8). + +**Arc verdict:** re-pricing rich, pricing thin. The show's native arc is INVISIBLE → FEARED rather than MOCKED → WORSHIPPED. W3 must either author a public pricing scene or lean the promo on the fear-arc. + +--- + +## 2. HARVEST — LINES + +**Slot 1 — THE WORLD-RULE LINE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Human (G) – The lowest level of humans in the system. This type is found only in newly initiated worlds." | SYSTEM | Ch 2 (introduction room) | KEEP-VERBATIM | +| "Gain TP upon killing beasts split amongst the contributors. Upon killing another initiate, half their TP will be split amongst the contributors." | SYSTEM | Ch 3 (tutorial panel) | COMPRESS | +| "The tutorial actively encourages us to kill each other. Don't forget that." | Jake | Ch 6 | KEEP-VERBATIM | +| "Three groups, thirty people, and only one fucking healer." | Richard | Ch 11 | KEEP-VERBATIM | + +**Slot 4 — CRUELTY-IN-COURTESY** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Young lady, you would not happen to be a healer, would you? It would be greatly appreciated if you came with us." | Richard | Ch 11 | KEEP-VERBATIM | +| "I want to solve this peacefully with everyone walking away happy, but I don't exactly have a choice here. We need a healer, one way or another." | Richard | Ch 11 | KEEP-VERBATIM | +| "We saw the smoke from your fire and decided to investigate—no need to worry. We have no intention of fighting anyone." | Richard | Ch 11 | COMPRESS | +| "Of course! Of course! Take your time!" | Richard | Ch 11 | KEEP-VERBATIM (only lands with staging) | + +**Slot 5 — THE VICTIM-BLAMED BEAT** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Look what happened. Joanna lost her damn leg, Jake. We are in a god-forsaken forest filled with monsters that want to eat us, and within mere hours, one of us is crippled." | Jacob | Ch 6 | COMPRESS | +| "What exactly was your plan when you decided to shoot into a bush, without having any goddamn clue what was in there? … What the fuck is wrong with you?" | Jacob | Ch 6 | COMPRESS | +| "We are humans, not beasts who attack anything we see." | Jacob | Ch 6 | KEEP-VERBATIM | + +**Slot 6 — THE PLAIN ANSWER / THE CHARGE SHEET** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "I won." | Jake | Ch 8 (night ambush aftermath) | KEEP-VERBATIM | +| "I'm good. None of it is mine." | Jake | Ch 9 | KEEP-VERBATIM | +| "I did what I deemed best, and I do stand behind the decision to kill the small boar." | Jake | Ch 6 | COMPRESS | +| "Of course," Jake answered. (to "you got confidence to hit one from here?") | Jake | Ch 4 | KEEP-VERBATIM | + +**Slot 7 — THE DEADPAN ACCEPTANCE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "As for my name and level? I am Mr. Eat Shit, and I am level go-fuck-yourself." | Jake | Ch 12 | KEEP-VERBATIM | +| "Thanks for calling me the lowest level of human, I guess?" | Jake (thought) | Ch 2 | REVOICE (internal → spoken) | +| "It was nice to meet you, I guess, whatever you are." | Jake | Ch 2 | KEEP-VERBATIM | + +**Slot 9 — THE COST-OF-BEING-RIGHT** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "But to just murder someone…" | Caroline | Ch 10 (after he saves all ten of them) | KEEP-VERBATIM | +| "…Why did you do that?" | Jacob | Ch 5 (chapter-ending turn) | KEEP-VERBATIM | + +**Slot 10 — THE WITNESS LINE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "I just thought you handled yourself so well back there, nothing more." | Bertram | Ch 5 | COMPRESS | +| "I agree with Jake. We need to learn how to fend for ourselves." | Casper | Ch 10 | COMPRESS | +| "What do you suggest we do?" (stepped up, "tone… not one of anger or confrontation, but sincerity") | Bertram | Ch 10 | KEEP-VERBATIM | + +**Slot 11 — THE UNCONDITIONAL LINE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Take care out there, my friend, and please do come back and check in whenever you can." | Jacob | Ch 12 (the hug + hidden satchel) | KEEP-VERBATIM | +| "Do take diligent care of everyone, Jacob, and don't let them bully you or anyone else." (reciprocal vow) | Jake | Ch 12 | KEEP-VERBATIM | +| "Wait!" (runs up, hugs him, covertly passes the potion satchel) | Jacob | Ch 12 | KEEP-VERBATIM | + +**Slot 12 — THE CLIFF LINE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "What… what happened?" Jacob stammered | Jacob | Ch 8 | KEEP-VERBATIM | +| "Holy shit, you scared me. Were you already awake?" | Lina | Ch 7 (he wakes before her touch) | COMPRESS | +| "Huh, issues? What kind of issues would those be?" | Richard | Ch 12 (setup half of the volley) | KEEP-VERBATIM | + +**Slot 13 — THE POWERSTART CANDIDATE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "*Initiation of the 93rd Universe confirmed. Introduction and tutorial sequence commencing*" | SYSTEM | Ch 1 (elevator) | KEEP-VERBATIM | +| "They seem to have misunderstood something… I am the one hunting them." | Jake (thought) | Ch 12 (final line of read span) | KEEP-VERBATIM | +| "His boring world had changed, and he had no intention of making this damn forest his grave." | Narration (single line) | Ch 3 | REVOICE (→ first-person VO) | +| "Murder. Killing. Homicide." | Narration (single line) | Ch 10 open | REVOICE | + +**Slot 14 — THE TYRANT'S COMMAND** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Just know that her joining us is nonnegotiable." | Richard | Ch 11 | KEEP-VERBATIM | +| "Your path is for you to discover. Now choose a class before we proceed." | SYSTEM entity | Ch 2 | KEEP-VERBATIM | +| "No. It tells you what you need to know for now." | SYSTEM entity | Ch 2 | KEEP-VERBATIM | + +**Slot 15 — THE DEATH CLOCK** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Duration: 63 days & 21:47:11 / Tutorial Type: Survival / Completion Criteria: Survive the duration of the tutorial." | SYSTEM | Ch 3 (tutorial panel) | COMPRESS | +| "Total Survivors Remaining: 1112/1200" (down 88 in under an hour) | SYSTEM | Ch 6 (panel re-check) | KEEP-VERBATIM | +| "Two months… He would have to survive two months in this forest." | Jake (thought) | Ch 3 | REVOICE | + +**Slot 16 — THE FALSE WORLD-FACT** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "We are humans, not beasts who attack anything we see." (the fact the title "Primal Hunter" itself disproves) | Jacob | Ch 6 | KEEP-VERBATIM | +| "If we work together and do our best, I am sure we can all make it home safe." | Jacob | Ch 3 | KEEP-VERBATIM (ironic under the survivor counter) | + +**Slot 17 — THE CONCEALMENT TAX** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "He purposely left out the whole Bloodline thing, though." | Narration (single line) | Ch 10 | REVOICE | +| "I… I am sorry, I was just… I don't know…" (absorbing the blame rather than explain his instincts) | Jake | Ch 6 | KEEP-VERBATIM | + +**Slot 18 — THE IMPOSSIBLE ACCEPTANCE** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Oh, fairly sure they're joining you, but I am not. … I have bigger prey to hunt." (one man walks alone into the murder-forest) | Jake | Ch 12 | KEEP-VERBATIM | +| "Yeah, it was my plan all along. I have my own goals for this tutorial." | Jake | Ch 12 | COMPRESS | +| "Tomorrow, we hunt." | Jake | Ch 10 (chapter close) | KEEP-VERBATIM | + +**Slot 20 — THE WRONG EXPLANATION** + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "Jake… were you in the military or something? Or maybe you went hunting from time to time?" | Bertram | Ch 5 | KEEP-VERBATIM | +| "Are you really sure this is doing anything? Well, I guess it's good target practice for me, but…" (Casper "genuinely wondering if Jake was actually a masochist") | Casper | Ch 7 | KEEP-VERBATIM | + +**Slot 21 — THE RECOGNITION DROP** *(partial — see thin-slot report)* + +| Verbatim quote | Speaker | Ch/Scene | Flag | +|---|---|---|---| +| "I am level 9 in my class, and we have a couple of others in our group at level 7 and above," Richard answered truthfully | Richard | Ch 12 (the veteran answers the nobody's challenge straight) | KEEP-VERBATIM | +| "Wake the fuck up, people! This entire fucking tutorial is focused on killing! … The world has changed, and you all need to get your asses moving and adapt if you want to survive." (the room goes wide-eyed silent) | Jake | Ch 10 | COMPRESS | + +--- + +## 3. HARVEST — IMAGES + +| Class | Image, verbatim-anchored | Ch/Scene | Flag | +|---|---|---|---| +| A | The system's first word on him: "Human (G) – The lowest level of humans in the system." over a status screen of 6s and 7s | Ch 2 | KEEP-VERBATIM | +| A | Identify aimed at another human returns nothing: "There simply was no response." | Ch 3 | KEEP-VERBATIM | +| A | The beasts read as "[??? - lvl 3]" — a world that won't even give him names | Ch 4 | COMPRESS | +| A | "just another face in the crowd. And he kind of liked it that way." | Ch 1 (office) | REVOICE | +| B | Blindfolded behind his back: "raising his left hand behind his back as he caught the arrow" — then the same arrow into his attacker's hand, one motion | Ch 8 | KEEP-VERBATIM | +| B | Three human kills → the screen changes register: "*Bloodline Detected* / Processing…" — the blood answers the blood | Ch 9 | KEEP-VERBATIM | +| B | "Richard raised a hand indicating for him to stop. Jake made the exact same motion." — back turned, the ambush dies as a gesture (anchors slot 21) | Ch 12 | KEEP-VERBATIM | +| C | Joanna's legs: "One of the legs was completely ruined, while the other was missing entirely from the knee down." — the group's first bill | Ch 5 | COMPRESS | +| C | The wooden leg, "essentially just a big stick of wood bound to her thigh," worn with "determination and grit to keep going on her face" | Ch 11 | KEEP-VERBATIM | +| C | The colleagues arriving to "a smiling Jake, completely covered in blood, standing over another corpse with a dozen arrows sticking out of it" — the price of being saved by him | Ch 8 | KEEP-VERBATIM | +| D | The goodbye hug that is really a handoff: Jacob "covertly passing him one of the satchels" — every potion he owns, given in secret | Ch 12 | KEEP-VERBATIM | +| D | "a homemade practice range at his parents' place" — twenty years of uncounted arrows before the system ever priced him | Ch 1 | REVOICE | +| E | "*You have slain [Human (G) - lvl 3 / Warrior (Medium) - lvl 7] – Bonus experience earned for killing an enemy above your level. 478 TP earned*" — a man reduced to a line item | Ch 9 | KEEP-VERBATIM | +| E | The Unique ability that carries his name: "awakened in the Bloodline of the newly initiated human, Jake Thayne" — "the description even included his name" | Ch 9 | KEEP-VERBATIM | +| E | The counter: "Total Survivors Remaining: 1112/1200" before the first sunset | Ch 6 | KEEP-VERBATIM | +| G | The bait corpse: the badger thrown from the bush "had been dead before he even hit it, with what looked like a long sword-cut across its stomach" — the ambush made object | Ch 10 | COMPRESS | +| H (weak) | His bow with the enemy sword "cut into the wood… and gotten stuck" — he lets go of the archer's weapon to survive as something else | Ch 8 | REVOICE | + +--- + +## 4. HARVEST — EXCHANGE SHAPES + +**S1 — The poisoned offer → predator inversion (Ch 11–12).** Richard: "It would be greatly appreciated if you came with us." → "Just know that her joining us is nonnegotiable." → Jake: "Richard, is it? What's your level?" → Richard: "I am level 9 in my class…" → Jake: "Well, that's slightly disappointing. I was hoping for you to be stronger. … I am Mr. Eat Shit, and I am level go-fuck-yourself." → "Do you honestly think that you are the predator in this scenario? … Because you're not. … A single misstep, and I will hunt you and all your pals down one by one. Sweet dreams." → the mirrored hand-raise. **Flag: KEEP-VERBATIM (trim middle turns).** + +**S2 — The blame volley → device re-pricing (Ch 5–6).** Jacob: "…Why did you do that?" → Jake: "Why did I do what?" → Jacob: "Joanna lost her damn leg, Jake. … What the fuck is wrong with you?" → Jake: "I did what I deemed best… The tutorial actively encourages us to kill each other. Don't forget that. … Seriously, look at the tutorial panel, everyone." → SYSTEM: "Total Survivors Remaining: 1112/1200." **Flag: COMPRESS (Jacob's tirade needs cutting; the panel is the mic drop).** + +**S3 — The aftermath verdict (Ch 8–9; strongest exchange in the source).** Jacob: "What… what happened?" → Jake (smiling, blood-drenched): "I won." → Caroline: "Are you hurt? There is so much blood…" → Jake: "I'm good. None of it is mine." **Flag: KEEP-VERBATIM (ship as-is).** + +**S4 — The gatekeeper stonewall (Ch 2; candidate new shape "the stonewall intake").** Jake: "can I ask about the different stats… and their effect?" → Entity: "No. It tells you what you need to know for now." → Jake: "Any advice or tips?" → Entity: "Your path is for you to discover. Now choose a class before we proceed." **Flag: COMPRESS.** + +--- + +## 5. THE THIN-SLOT REPORT (authorship map) + +- **Slot 2 (mockery-that-teaches): EMPTY.** Nobody mocks Jake in Ch 1–12 — the source's insult is invisibility, not laughter. W3 must author the mocking voice (Richard's crew or an office coworker are the natural mouths) if the promo runs the laughter→silence engine. +- **Slot 3 (sacrifice line): EMPTY.** Family exists only as backstory mention. No concrete gift, no cost object. Full authorship. +- **Slot 8 (all-in wager): EMPTY.** Jake makes threats, never wagers; no two-sided public stakes. W3 could build one from the Richard standoff ("if something happens, we will have issues" is the raw half of a wager). +- **Slot 19 (overheard verdict): EMPTY.** Nearest material is inverted — Jake writing "THEY LISTEN / BAD FEELING / CAREFUL" in the dirt (Ch 11, harvestable as a staged image) and Jake *watching* Richard whisper to his second (Ch 12). +- **Slot 21 (recognition drop): PARTIAL.** The stunned-ambush image exists (mirrored hand-raise, Ch 12) but no gatekeeper collapses into *deference* with a line — Richard is unsettled, not bowed. The verbal collapse is authorship territory. +- **Slot 22 (deathbed charge): EMPTY.** No dying mentor, no last instruction anywhere in the span. +- **Image F (the kneel): EMPTY.** **Image H (destroyed token): WEAK** — only the hacked bow. +- **MASTER ARC Beat 1: WEAK** (see §1). The public-laughter pricing scene does not exist and must be authored; the re-pricing instruments (Bloodline notification, "I won.", the mirrored gesture) are strong enough to anchor whatever pricing W3 invents. + +--- + +## 6. FREE HARVEST (≤10) + +1. **"Today, they were simply prey."** (narration single line, Ch 12) — the whole show's thesis in five words; instant VO tag. +2. **"RUN!"** → "Jake had no idea who had yelled" (Ch 5) — pure panic texture for the ordinary-people half of the cast. +3. **"I'm not saying they are not slightly ferret-like; I'm saying that you're confusing ferrets and weasels!"** (Lina, Ch 4) — office-worker comedy mid-apocalypse. +4. **"OW! For fuck's sake, that hurts!" / "Jake, are you sure about this?"** (Jake/Casper, Ch 7) — hero pays for power in bruises, on purpose; instantly likable training beat. +5. **"Oh god… can bacteria get levels? … Happy thoughts, happy thoughts..."** (Jake thought) — the funniest system-horror beat in the span. +6. **"No donuts, he noted internally with great disappointment."** (Ch 1) — perfect before-picture miniature; the smallest possible stakes, hours before the survivor counter. +7. **"You have chosen the Archer class. Confirm?"** + Jake's "even the mighty system is prone to security prompts" (Ch 2) — the apocalypse runs on UI. +8. **"You are leaving us?" Casper managed to mutter out.** (Ch 12) — the abandonment beat landing on the one friend who copied him; quiet gut-punch. +9. **"Wouldn't a fight without any risk be a bit… boring?"** (Jake thought, Ch 4) — earliest tell of the bloodline before the system names it; plants the re-pricing. +10. **"Do you think those three archers will land their shot before I remove your head?"** (Jake, Ch 12) — the most promo-ready threat line in the span. + +--- + +## FINDINGS (standing enforcement — seeded) + +| ID | Note | Status | Enforcement | +|---|---|---|---| +| F-201 | No pipeline run on this ledger yet; the thin-slot report above is the standing authorship map | OPEN | First W3/W4 run ships its checklist against this ledger, every row placed or declined-with-reason; W5 appends findings | +| F-202 | Native arc is INVISIBLE → FEARED; the public-pricing (mockery) beat does not exist in source and must be authored or the promo leans the fear-arc | OPEN | The build declares which arc it runs in the W2 header; checklist verifies | diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_RBM_v4.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_RBM_v4.md new file mode 100644 index 0000000..29d3e37 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_RBM_v4.md @@ -0,0 +1,301 @@ +# LEDGER — RBM "Rise of the Beastmaster" · v4 (canon-source harvest only — Disowned-promo deposits stripped) + +**LINEAGE.** Supersedes `Ledger_RBM_v3.md` (archived to `working files/archive/process/`). **v4 STRIPS the SLOT 0/0b/0c/0d Disowned-promo deposits + F-001–F-004 per the Harvest Provenance Law — an unvalidated promo is not harvest; v4 is canon-source harvest only.** Every remaining row carries forward from v3 verbatim: SLOT 1–22, §3 Images, §4 Exchange Shapes, §5 Thin-Slot Report, §6 Free Harvest, and FINDINGS F-101/F-102/F-005/F-006 — all source-verbatim, status **CANON** unless a status column says otherwise. (The stripped material — the operator-authored disownment ladder, the curb line + folded clock, the five cold-test operator keep-lines, the declined line, and the F-001–F-004 findings about the Disowned *build* — was never source-harvest; the five keep-lines are quarantined per Blueprint_PromoHarvest_v3's Harvest Provenance Law, not carried here.) + +*Source (v2, retained): RBM eps 1–20 ("Born of Fire" → "A Kingdom Watches"). Generated by the harvest pass against Blueprint v3. Provenance note: several assets previously known only from the model-generated Disowned cycle turn out to be canon-true in the source — the wager stack, the disowning ("Not as my son. Not as my heir."), "That's my boy," "Not dead yet, brother," "crushed standing up" — and survive the purge on canon provenance.* + +--- + +## 1. THE MASTER ARC REPORT + +**PUBLIC PRICING — PRESENT, strong. Device variant** (star-rating in a newborn beast's eyes + the public selection square). + +The instrument, stated: *"The stars in the eyes of newborn life bound beasts show their potential"* (Jasper, Ep 3) and the verdict it returns: *"His heart sank when he saw a single star."* / *"A one star beast was weak. Common."* (Ep 3). The public pricing rite is Eastwind Square, Ep 12 — Albie invites the measurement (*"Well then, let's see it. If you're this confident, it must be something special. Six star? Seven star?"*), Jasper summons a tiny yellow chick, and the square prices him to laughter: *"He's brought a bloody chick!"* (crowd, Ep 12); *"That thing isn't even enough for a starter course, and you made it your lifebound beast?"* (Albie, Ep 12). Even the dignitaries on the spire laugh. + +**RE-PRICING — PRESENT but demonstration-only, and deliberately undercut.** + +Laughter becomes silence twice at the same instrument: *"The laughter vanished. A chill swept through the crowd."* (Ep 12) and *"No one laughed now. The square had fallen completely silent."* (Ep 12), capped by the authority chorus *"How is that possible? Albie's at the seventh level of the Beastblood Tier. That outcast shouldn't be able to touch him!"* (dignitary, Ep 13) and the crowd flip *"He's got nerve, I'll give him that. The lad's got spine."* (Ep 14). + +**Authorship note for W3:** the pricing *instrument itself* never re-measures him in public. The device-level re-pricing image exists — the single star splitting into *"one star became ten. Ten became a hundred. A thousand"* until Jasper is *"lost in a vast starscape"* (Ep 3) — but it happens in private, at hatching. The world still reads "one star" at Ep 20. That gap is the promo's loaded gun: W3 can stage the private starscape against the public laughter. The source immediately re-flips the board (Euan, Eps 15–16): the re-pricing is paid for with a fresh, deeper pricing and a one-month clock — a wager, not a coronation. **The promo arc should end on the wager, not on false triumph: PRICING → false RE-PRICING → THE WAGER.** + +--- + +## 2. HARVEST — LINES + +**SLOT 1 — THE WORLD-RULE LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Jasper Cooke, by the authority granted to me as a student of the Skyward Directorate, I pass judgment on you. For your crime, your lifebound beast will die." | Niall Redfern | 1 | KEEP-VERBATIM | +| "The stars in the eyes of newborn life bound beasts show their potential" | Jasper | 3 | KEEP-VERBATIM | +| "Seventh level is a guaranteed place at Amberbourne!" | Crowd voice | 10 | KEEP-VERBATIM | +| "But everyone in Blazehollow knew the same truth. No one stood against Thunderbolt Hall and won." | Narrated (single lines) | 16 | COMPRESS | + +**SLOT 2 — THE MOCKERY-THAT-TEACHES** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "He's brought a bloody chick!" | Crowd voice | 12 | KEEP-VERBATIM | +| "Oh, Jasper. That thing isn't even enough for a starter course, and you made it your lifebound beast?" | Albie | 12 | KEEP-VERBATIM | +| "Your beast essence barely reaches the sixth level of Beastblood. And with a one star beast, you are crippled before the fight even begins." | Euan | 16 | KEEP-VERBATIM | +| "What is that ridiculous thing meant to be? Is it a toy?" | Sophie | 5 | KEEP-VERBATIM | + +**SLOT 3 — THE SACRIFICE LINE** *(partial — companion variant only; see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Jasper. Safe." — "That was all Midas had wanted." | Midas (final bond-pulse) | 2 | KEEP-VERBATIM | +| "You idiot. Why would you do that?" | Jasper | 2 | KEEP-VERBATIM | +| "No one in Blazehollow could truly understand how much she had lost in this place. Her youth. Her pride. Her future. Everything had been buried here." | Narrated (single lines) | 10 | COMPRESS | + +**SLOT 4 — CRUELTY-IN-COURTESY** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "He was most upset that he couldn't come in person, so he asked me to bring you his gift." (the gift is divorce papers, on her birthday) | Lois | 4 | KEEP-VERBATIM | +| "Spirit gems. A generous settlement. Enough to live on comfortably, if one is sensible." | Lois | 5 | KEEP-VERBATIM | +| "I am willing to be generous and give you half an hour." | Lois | 5 | KEEP-VERBATIM | +| "An impressive display, Jasper. I'm glad to see the last three years did not break you." (narration: "To anyone listening, it sounded civil. It was not.") | Archie | 14 | KEEP-VERBATIM | + +**SLOT 5 — THE VICTIM-BLAMED BEAT (frame-up + shame splash)** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Niall! Save me! Save me, please!" (dress she tore herself, "her face was pale and stricken in exactly the right way") | Lydia | 1 | KEEP-VERBATIM | +| "Jasper Cooke!" the rider roared. "How dare you lay hands on this young woman?" | Niall Redfern | 1 | KEEP-VERBATIM | +| "You have already brought enough shame on this family. Do not make this day uglier than it already is. If not for me, then for my poor bride on this her wedding day!" | Archie | 11 | KEEP-VERBATIM | +| "It's hardly as though Jasper has done anything but ruin his life. Blazehollow has known the truth about you for years. This just makes it official." | Sophie | 5 | KEEP-VERBATIM | + +**SLOT 6 — THE PLAIN ANSWER / THE CHARGE SHEET** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "No. Your hand's just weak." (to "You're wearing metal armour!") | Jasper | 12 | KEEP-VERBATIM | +| "Your daughter attacked first. Remember that." | Jasper | 6 | KEEP-VERBATIM | +| "All the things you've done. All the trouble you've caused. Did you really think no one knew? No one stopped you because you were Archie Cooke's precious son!" | Jasper | 14 | KEEP-VERBATIM | +| "The Order is mine. I earned it. What happens after that, I will deal with myself. Once I leave here today, we owe each other nothing, Governor." (narration: "The word was deliberate. Not Father. Governor.") | Jasper | 14 | KEEP-VERBATIM | + +**SLOT 7 — THE DEADPAN ACCEPTANCE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Maybe. But I'd rather be crushed standing up than crawl out of town." | Jasper | 7 | KEEP-VERBATIM | +| "Done?" (still standing, her handprint smouldering on his shirt) | Jasper | 6 | KEEP-VERBATIM | +| "Take a look in the mirror, action hero." | The chick (Felix) | 3 | KEEP-VERBATIM | +| "I was born five minutes ago. How much did you know dangling from your umbilical cord?" | The chick (Felix) | 3 | KEEP-VERBATIM | + +**SLOT 8 — THE ALL-IN WAGER** *(the source's strongest single harvest)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "In one month, right here, I'm going to punch you that smug face of yours." | Jasper | 16 | COMPRESS (source typo; punch-up is W3's) | +| "If you lose, the Order of the Amber Flame is mine. Do you accept?" | Jasper | 16 | KEEP-VERBATIM | +| "And what do I get if you lose?" / "My life," Jasper said plainly. / "Done," he agreed. | Euan / Jasper / Euan | 16 | KEEP-VERBATIM | +| "You said you'd live in a tree. So choose one." | Jasper | 5 | KEEP-VERBATIM | + +**SLOT 10 — THE WITNESS LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "That's my boy," she smiled, lifting a hand in approval. | Freya | 6 | KEEP-VERBATIM | +| "This prodigal son is not bluffing," she said quietly to herself. | Cora | 11 | KEEP-VERBATIM | +| "Let's be honest. Young master Albie Fenwick has always been a bully. This is karma." | Old man in crowd | 14 | KEEP-VERBATIM | +| "Why does it feel so natural talking to you? Have we met before?" | Maisie | 19 | KEEP-VERBATIM | + +**SLOT 11 — THE UNCONDITIONAL LINE (incl. reciprocal vow)** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Hey, we're a team now." | The chick (Felix) | 4 | KEEP-VERBATIM | +| "Don't worry. I don't know what this is, but I do know one thing. I would never harm you. Alright?" (hero to beast, over the monstrous arm) | Jasper | 9 | KEEP-VERBATIM | +| "A mother should always encourage her child." | Freya | 7 | KEEP-VERBATIM | +| "It's all right if you can't find any. Just promise me you'll come back as soon as you can." | Freya | 17 | KEEP-VERBATIM | + +**SLOT 12 — THE CLIFF LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "That's not possible," she gasped. | Sophie | 6 | KEEP-VERBATIM | +| "It's not possible," he cried out. (arm broken, square silent) | Albie | 12 | KEEP-VERBATIM | +| "How is that possible? Albie's at the seventh level of the Beastblood Tier. That outcast shouldn't be able to touch him!" | Dignitary on the spire | 13 | KEEP-VERBATIM | +| "What did you just do to my hawk?" | Sophie | 6 | KEEP-VERBATIM | + +**SLOT 13 — THE POWERSTART CANDIDATE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "No, Jasper. Something almost went wrong. I nearly ended up trapped with you. Stuck living some small, miserable little life." | Lydia | 1 | KEEP-VERBATIM | +| "It would be three years before Blazehaven heard of him again. When he returned, he would carry an inferno with him." (flashforward close/cold-open seam) | Narrated (single lines) | 2 | KEEP-VERBATIM | +| "The trap had closed on Jasper. Lydia had sold him out, and Niall Redfern now intended to kill his lifebound beast." | Narrated (single lines) | 2 | COMPRESS | +| "Three years passed. Since the betrayal. Since the trap. Since Midas' death." | Narrated (single lines) | 3 | COMPRESS | + +**SLOT 14 — THE TYRANT'S COMMAND** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "But hear me clearly, Jasper. If you stand here today, you stand alone. Not as my son. Not as my heir. Not as anything this house will ever claim again." | Archie | 11 | KEEP-VERBATIM | +| "Quiet," Redfern snapped. (as Midas dies) | Niall Redfern | 2 | KEEP-VERBATIM | +| "You and your mother should begin packing." | Lois | 5 | KEEP-VERBATIM | +| "Go down and show them how mistaken they are." | Archie (to Euan) | 15 | KEEP-VERBATIM | + +**SLOT 15 — THE DEATH CLOCK** *(present but narrated — needs voicing; see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "the physician who visited now and then believed she had months left at best" | Narrated (single line) | 7 | REVOICE | +| "Ten days until the Amberbourne selection. Ten days until his father's wedding. Ten days until Jasper Cooke walked back into the world that had cast him out." | Narrated (single lines) | 7 | COMPRESS | +| "A month, perhaps, now that my sister is married and I have the Order, there's no reason to stay longer." (starts the one-month clock) | Euan | 16 | KEEP-VERBATIM | +| "he checked the supply of clear spirit grass he kept for her illness and was shocked by how little remained" | Narrated (single line) | 17 | REVOICE | + +**SLOT 16 — THE FALSE WORLD-FACT** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Don't concern yourself with him. He's finished." | Archie | 10 | KEEP-VERBATIM | +| "You have a one star lifebound beast. Whatever strength you possess now comes from what you built in the past. Even with the Order, Amberbourne College may not take you back." | Archie | 14 | KEEP-VERBATIM | +| "The practice was almost unheard of. Countless beastmasters had tried. Almost all had failed." (the blood pact / second beast) | Narrated (single lines) | 12 | COMPRESS | +| "You lost everything. Your beast is dead. Your name is ruined." | Albie | 11 | KEEP-VERBATIM | + +**SLOT 17 — THE CONCEALMENT TAX** *(partial; see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Jasper had never told anyone, not even his family or Lydia, that his Expanse held a secret." (the ten eggs) | Narrated (single line) | 3 | COMPRESS | +| "But by morning, anyone who saw it would think he was a monster." (glove pulled over the claw) | Narrated (single line) | 9 | COMPRESS | +| "Interesting, she thought. This Jasper must have got his strength back some time ago and hid it until today." | Cora (internal) | 13 | KEEP-VERBATIM | + +**SLOT 18 — THE IMPOSSIBLE ACCEPTANCE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "No," Jasper shouted. / "Not just yet. There's one challenger left." (smashing his glass on the stones) | Jasper | 10 | KEEP-VERBATIM | +| "You really believe you can challenge my son?" / "Yes," he replied, evenly. (narration: "No flourish in it. No theatricality. Just certainty.") | Archie / Jasper | 11 | KEEP-VERBATIM | +| "My life," Jasper said plainly. | Jasper | 16 | KEEP-VERBATIM | +| "Fine by me. That makes this simpler." (to total disinheritance) | Jasper | 11 | KEEP-VERBATIM | + +**SLOT 19 — THE OVERHEARD VERDICT / THE SERVANT'S WHISPER** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "We're being pushed aside just as much as you are, Freya. All to make room for Archie's new wife." (Jasper overhears from the stairs) | Lois | 7 | KEEP-VERBATIM | +| "Do you know why Niall didn't kill you back then? Because hope is far more satisfying to crush when you leave the owner alive to feel it." | Euan | 15 | KEEP-VERBATIM | +| "Thank heavens no one outside Thunderbolt Hall knows it exists." (the manna at Red Twill Tor — audience-only overhear, pillow-talk scheming) | Cora | 16 | KEEP-VERBATIM | +| "When Niall Redfern killed your lifebound beast, I was there." | Euan | 15 | KEEP-VERBATIM | + +**SLOT 20 — THE WRONG EXPLANATION** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "What have you done? You're wearing metal armour!" | Albie | 12 | KEEP-VERBATIM | +| "Jasper Cooke used some cheap trick! Disqualify him! Arrest him!" | Madam Monet | 13 | KEEP-VERBATIM | +| "Whatever strength you possess now comes from what you built in the past." (authority's hierarchy-protecting theory) | Archie | 14 | KEEP-VERBATIM | +| "A scruffy nobody from the middle of nowhere? Level two, at best." (then perfect sync) | Elowen | 20 | KEEP-VERBATIM | + +**SLOT 22 — THE DEATHBED CHARGE** *(variant only — the mother is dying slowly, not on a deathbed; see thin-slot report)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "When people want to see you crawl, never give them the satisfaction. We walk out with our heads high. And one day, when the time is right, we return the same way." | Freya | 5 | KEEP-VERBATIM | +| "If something valuable is lying there waiting to be picked up, pick it up. Win first. Worry about dignity later." | Freya | 7 | KEEP-VERBATIM | +| "My advice is always the same. Follow your heart." (then the single tear after the gate clicks shut) | Freya | 10 | KEEP-VERBATIM | +| "Jasper. Safe." (dying companion's last transmission — interrupted-charge energy) | Midas | 2 | KEEP-VERBATIM | + +*Slots with no table: 9 and 21 — see thin-slot report.* + +--- + +## 3. HARVEST — IMAGES + +| Class | Image, verbatim-anchored | Ep | Flag | +|---|---|---|---| +| A | The newborn's eye read in public terms: "His heart sank when he saw a single star." — Midas "had awakened with five stars" | 3 | KEEP-VERBATIM | +| A | Swept out "alongside his mother like unwanted furniture" — the divorce delivered in "his father's hand. The language was formal. Almost courteous." | 4–5 | COMPRESS | +| A | The deliberate un-naming in reverse: "The word was deliberate. Not Father. Governor." | 14 | KEEP-VERBATIM | +| B | The single star splits: "One star became ten. Ten became a hundred. A thousand." — until Jasper stands "lost in a vast starscape" (the pricing instrument overflows) | 3 | KEEP-VERBATIM | +| B | The kiss that turns: "Jasper tasted blood." — she had bitten him; then the roof is torn away | 1 | KEEP-VERBATIM | +| B | Her Blazing Palm leaves "the handprint smouldering on his shirt"; his answer burns "an imprint of Jasper's palm... into the leather" of hers | 6 | KEEP-VERBATIM | +| C | The tomato thrown at the disowned heir: "Someone threw a tomato, which landed messily a few feet away from Jasper." | 11 | KEEP-VERBATIM | +| C | The challenge priced in glass: "smashed his glass to the ground... The broken glass glittered at his feet." | 10–11 | KEEP-VERBATIM | +| C | The public unmaking of the heir: hauled up by the collar, slapped twice, "Albie collapsed in a sobbing heap. 'Dad!' he howled" | 14 | KEEP-VERBATIM | +| D | The jade hairpin, "green stone worked into the shape of a curling feather," fixed in the betrayer's hair minutes before the trap | 1 | KEEP-VERBATIM | +| D | The Scarlet Vein Knife "dug from the mud and the wreckage of Lydia's house, cleaned... the first time he had drawn it in anger since" | 13 | KEEP-VERBATIM | +| D | The riding glove "he had not worn since losing Midas," dragged out by the chick to hide the monstrous claw | 9 | KEEP-VERBATIM | +| D | The nine remaining eggs in the Vitalbound Expanse — hope hoarded eighteen years, never told to anyone | 3 | COMPRESS | +| E | The system's mouth: "Well then, let's see it... Six star? Seven star?" — answered by a tiny yellow chick on Jasper's head | 12 | KEEP-VERBATIM | +| E | The verdict inverted mid-read: laughter → "The laughter vanished. A chill swept through the crowd." → "No one laughed now. The square had fallen completely silent." | 12 | KEEP-VERBATIM | +| E | Maisie's ten sealed nails — eight marked with patterns "hard to make sense of," two "bright and jewel-like": a countdown made flesh | 19 | COMPRESS | +| F | Redfern's lightning "locking every muscle in place. Jasper crashed to the floor" — priced at the villain's feet in scene one | 1 | KEEP-VERBATIM | +| F | Albie shrieking backwards as his own beast "crashed down in front of him... barely conscious" — the kneel delivered by proxy | 14 | KEEP-VERBATIM | +| G | The betrayal made object: "she grabbed one shoulder of her dress and tore it down" — evidence manufactured from her own gift-night costume | 1 | KEEP-VERBATIM | +| G | The Battle Spirit ripped glowing from the dying Midas: "Jasper watched helplessly as Redfern reached into Midas and seized the glowing Battle Spirit" | 2 | KEEP-VERBATIM | +| G | The divorce paper produced "from the sleeve of her dress" as a birthday gift; the pouch of gems landing "with a heavy clink" | 4–5 | KEEP-VERBATIM | +| H | Closest fit (weak — see thin-slot report): the love-gift house itself destroyed — the roof torn off around the jade-pin moment; and the hero-side inversion, smashing his own champagne flute to buy back his place | 1 / 10 | REVOICE | + +--- + +## 4. HARVEST — EXCHANGE SHAPES + +**a) The devil's-bargain / all-in wager ladder** (Ep 16) — flag KEEP-VERBATIM: +Jasper: "When are you leaving Blazehollow?" → Euan: "A month, perhaps" → Jasper: "In one month, right here... If you lose, the Order of the Amber Flame is mine. Do you accept?" → Euan: "And what do I get if you lose?" → Jasper: "My life," said plainly → Euan: "Done." (Stakes named both sides, in public, death on the table — textbook slot-8 shape.) + +**b) The wrong-explanation pile-on** (Eps 12–13) — flag KEEP-VERBATIM: +Impossible evidence (Albie's arm breaks on a blocked chop) → Albie: "You're wearing metal armour!" → Albie: "You're hiding something! You have a new beast. I felt it!" → dignitaries: "How is that possible? Albie's at the seventh level..." → Madam Monet: "Jasper Cooke used some cheap trick! Disqualify him! Arrest him!" (The room competes to degrade the evidence.) + +**c) The pricing→re-pricing volley, compact** (Ep 12) — flag KEEP-VERBATIM: +Albie: "Six star? Seven star?" → the chick appears, "Tiny. Yellow. Fluffy." → crowd: "He's brought a bloody chick!" → chick: "How dare you look down on me, you upstart whelp!" → a yellow streak, Albie down, "It spat out a piece of flesh. 'You'd think pampered meat would taste better'" → "The laughter vanished." (Both master-arc beats inside four turns — prime promo spine.) + +**d) The heretic's correction** (Ep 4) — flag KEEP-VERBATIM: +Chick: "What are you doing?" → Jasper: "Training. This is Amberbourne's strongest technique." → chick: "What kind of ignorant backwater have I been born into?" → the Embers Tome floods him → Jasper: "This is impossible" → chick: "Welcome to real training." + +**e) The shame-inversion challenge ladder** (Ep 5) — flag KEEP-VERBATIM: +Sophie: "If we ever hear from you again, I'll happily climb a tree and live in it!" → Jasper recounts Southwood ("I tracked them for three days and nights... I'm the reason you got back alive") → "So choose one." → Sophie: "Are you challenging me?" → Jasper: "Yes." (Mockery converted into a public wager at par.) + +**f) The severance rite** (Eps 4–5, cruelty-in-courtesy ladder) — flag COMPRESS: +Lois: "he asked me to bring you his gift" → the paper → Lois: "He feels it would be kinder to allow you some peace" → Freya: "So that is how it ends." → "No... Enough sympathy. I know you enjoyed bringing this news into my home." (Formal wounding words met with the unpleading reply — rite-variant energy without a rite.) + +**g) The poisoned-offer inversion** (Ep 15) — flag KEEP-VERBATIM: +Euan offers the handshake ("Jasper Cooke. Euan Pennington.") → the grip transmits his power deliberately → "You nearly had the Order... Unlucky." → "Do you know why Niall didn't kill you back then? Because hope is far more satisfying to crush when you leave the owner alive to feel it." (Courtesy as reconnaissance; the kindness is the knife.) + +--- + +## 5. THE THIN-SLOT REPORT (authorship map) + +- **SLOT 9 — COST-OF-BEING-RIGHT: effectively EMPTY.** Nearest ore is narrated and oblique: Jasper "had told his father everything, how he had been framed... Archie's answer had been silence" (Ep 14). No scene punishes him *for being correct*. W3 must author this — cleanest seam is the three-year gap (right about Lydia/Redfern, believed by no one, priced as the attacker). +- **SLOT 21 — THE RECOGNITION DROP: MISSING.** No gatekeeper collapses into deference; nobody yet knows what a Primordial Chaos Beast is, so there is no instrument that CAN recognize him. The public star-count still reads one. This is the show's withheld payoff — W3 authors the drop as promise, not event (the private starscape of Ep 3 is the verbatim anchor for what recognition will look like). Mini-drops as texture: "It can talk?" (Sophie, Ep 5); rooms freezing when the chick speaks. +- **SLOT 22 — DEATHBED CHARGE: variant only.** Freya delivers charge-grade lines while dying slowly, but there is no deathbed scene and no interrupted word. +- **SLOT 3 — SACRIFICE LINE: partial.** No concrete family-cost line. The Midas self-sacrifice covers the emotional function; the *material* family sacrifice is absent. +- **SLOT 15 — DEATH CLOCK: present but unspoken.** "Months left at best" and the dwindling clear spirit grass are narrated, never said aloud. W3 will likely need to voice the clock. The one-month wager clock IS spoken and carries well. +- **SLOT 17 — CONCEALMENT TAX: weak.** Jasper conceals but never absorbs public humiliation *to protect* the secret. The RD-lane engine is not this show's engine; don't force it. +- **IMAGE CLASS H — DESTROYED TOKEN: thin.** The hairpin's fate after the betrayal is unstated — a loaded object the source leaves on the table; ask the operator whether to author its return/destruction. +- **Structural:** build the promo master arc PRICING → false RE-PRICING → THE WAGER, which the source supports verbatim end to end. + +--- + +## 6. FREE HARVEST (≤10) + +1. **"Pluck you!" shouted Everblaze Inferno.** (Felix, Ep 12) — censor-proof battle cry; instantly clippable, pure show-voice. +2. **"You were supposed to fly with me. You were supposed to stay."** (Jasper, Ep 2) — the grief line of the whole source; forehead to bloodied feathers in the rain. +3. **"And you've wet yourself," it chirped.** (Felix, Ep 6) — the companion finishing a duel with one sentence; crowd-flip fuel. +4. **"I'm not scared of her. I'm in love with her."** (Felix, Ep 6) — fear→love reversal in four words; defines the companion's engine. +5. **"This is how every great romance begins!"** (Felix, Ep 6, hurling himself at a predator ten times his size) — the show's tone in one line. +6. **"Nonsense. It will do her a world of good to find out what losing feels like."** (Freya, Ep 6) — the frail mother out-icing the villainess. +7. **"Two hundred and ninety," the chick corrected, swallowing another.** (Felix, Ep 8) — timing-perfect deadpan; the gem-eating bit's best beat. +8. **"I like your duck," said a soft voice in Jasper's ear.** (Maisie, invisible, Ep 19) — the romantic lead's first line is a wrong-species joke. +9. **Midas shields the betrayer too:** "He hit Jasper first, hurling him sideways out of harm's way. Then he twisted, spreading all four wings wide, and threw his body across Lydia as the wave struck." (Ep 2) — the most character-defining staged image in the source. +10. **"A breath touched his ear. 'Not dead yet, brother.'"** (Jasper, Ep 13) — the assassination-art reveal from inside the firestorm; cold-open-grade. + +--- + +## FINDINGS (standing enforcement) + +| ID | Note | Status | Enforcement | +|---|---|---|---| +| F-101 | No pipeline run on this ledger yet; the thin-slot report above is the standing authorship map | OPEN | First W3/W4 run ships its checklist against this ledger, every row placed or declined-with-reason; W5 appends findings | +| F-102 | Promo arc shape ruled by the master arc report | OPEN | The build ends on THE WAGER, not on false triumph; checklist verifies by quote | + +*Fired triggers from the blind A/B (RBM scene 1, vs the v7 lineage) — first exercise of W5's "log every fired trigger to the show ledger" rule.* + +| ID | Note | Status | Enforcement | +|---|---|---|---| +| F-005 | RBM scene-1 cold-rewrite test: the comparative cold grader's rank anti-tracked the operator's ear (ρ≈0.09) — it rewarded dense, image-saturated prose the operator hears as audiobook drag and over-punished audible seams. **Graders never rank prose** | STANDING | No model grades prose quality; graders do mechanical trigger-walking + fidelity/HARD-BLOCK verification only. A "5" on Writing Style & Voice requires operator-confirmed keep-lines | +| F-006 | RBM scene-1 cold-rewrite test — the crowd law: **new-information-or-cut** (a crowd line adds a fact/stake/price/consequence or it does not exist; reaction alone is cut) and **landings belong to the principals** (render the blow on the principals before any crowd voice reacts; a crowd line pre-empting a landing is a staging defect) | STANDING | Every authored crowd line held to the FIRST TEST (new information) then the SECOND TEST (act or staked speaker); the landing is staged on the principals first — verified at W4 Station 3 | diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_RotHC_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_RotHC_v1.md new file mode 100644 index 0000000..03cebd6 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_RotHC_v1.md @@ -0,0 +1,395 @@ +# LEDGER — RotHC "Reign of the Hidden Commander" · v1 (auto-harvested from source · blueprint v3) + +*Source: RotHC eps 1–20 ("Souls Actually Exist After Death" → "A Life Free From Debt"). Generated by the harvest pass against Blueprint v3. **All rows status CANON** — no promo has shipped on this show, so there are no PROVEN rows and no cracked-script column. Scope: lines, images, exchange shapes — **never narration blocks**. Each run's Reviewer Checklist records every row as placed or declined-with-reason; a silent drop is a defect.* + +> **Source-integrity warnings — carry these forward.** +> 1. **Name slip.** In Ep 8 Soren says "Alaina" aloud four times where the child is publicly "Alain." Source error. Any row reused verbatim needs the name corrected at build time. +> 2. **Spaced-quote artifact.** Interior monologue is marked with spaced double quotes (` "only " `, ` "Alain? " `, ` "It's flat. " `). Reproduced exactly in the rows below; strip at draft. +> 3. **Telepathic dialogue** between Alaina and Little Four uses single quotes in source (eps 8–10). +> 4. **Eps 11–20 open mid-beat** — the export appears to have clipped 1–3 lines off the head of eps 12, 13, 15, 17, 18, 19. + +--- + +## 1. THE MASTER ARC REPORT + +**PUBLIC PRICING — PRESENT, but as a CATEGORY pricing, not a person pricing. This is the single most important finding in the file.** + +The world never measures Alaina and finds her wanting. It excludes her *before* measurement, on a law about what she is. The instrument is **Commonwealth inheritance law** and it prices her at zero the moment she is born a girl — and the law is stated **only in narration** (Ep 2: *"only male family members could inherit"*; Ep 3: *"Not a single woman, no matter how much she trained… could withstand that kind of recoil"*). **No character says it aloud in twenty episodes.** + +What IS spoken is the pricing by proxy — the branch family arriving to take the dead man's legacy, with courtesy: +- *"We must ensure that Major General Caius Valerius's sacrifice was not in vain. We are not denying Young Lord Alain Valerius's right to his inheritance. We are simply asking that the Valerius family choose its most outstanding child…"* (Soren, Ep 6) +- *"The Valerius family made Caius. … We can certainly make another."* (Soren, Ep 7) +- *"Lady Valerius, it's not too late. Retract your wager, and the Valerius family will raise Alaina with the utmost care."* (Soren, Ep 8 — she is priced as a dependent, not a candidate) +- The rival child's readout: *"Physical Fitness S Rank, Spiritual Power Tier One, and Potential A Plus Rank … Excellent. Recommended for accelerated development."* (Ep 8) + +**RE-PRICING — PRESENT and clean, at the same instrument, minutes later.** The military's own top-of-the-line assessment device, brought in at Soren's request: + +> *"Physical Fitness: S Rank / Spiritual Power: Tier Two / Potential: S Rank / Assessment Overview: Exceptional. Recommended for maximum priority development."* (Ep 8 — four separate lines in source) + +Capped by *"Soren, … You know the way out."* (Seraphina) and the enemy's exit grunt *"Hmph. Let's go!"* + +A **second, private re-pricing** fires at Ep 18 on a different instrument — the tempering bath: *"The results were far better than we ever could have hoped. Her metrics improved by thirty to eighty percent across the board."* (Elara) → *"Really?!"* → *"God bless the Valerius family."* (Quentin, twice). The benchmark that makes the number land — Caius's all-time family record of 10–50% — is **narration and must be voiced**. + +**Authorship note for W3 — three hard gaps.** + +1. **No witness ever speaks at a re-pricing.** All three recognition beats in eps 1–20 — the newborn pod alarm (Ep 3), the assessment reversal (Ep 8), the ten-vial absorption (Ep 10) — are delivered by a machine readout or by narration, with **zero spoken reaction from the room**. For an audio-first promo, the reaction lines do not exist and must be authored. +2. **The cruellest law is never in a mouth.** Both load-bearing rules (male-only inheritance; no woman can pilot an Imperator) are narration. Putting one in an authority's mouth is the highest-value writing job in the whole source. +3. **The win is a lie and the source knows it.** The re-pricing is won by a girl the room believes is a boy. The victory *deepens* the concealment rather than relieving it — which is the natural resolution-withhold. + +**Ruled promo arc: PRICING-BY-CATEGORY → THE WAGER → RE-PRICING → THE TAX.** The wager (eps 7–8) is this source's spine, exactly as it is in RBM. Do not end on the win; end on what the win costs — *"Tell Uncle Quentin, that Young Lord Alain Valerius and I are both fine."* + +--- + +## 2. HARVEST — LINES + +**SLOT 1 — THE WORLD-RULE LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "We'll select an heir from the Valerius children three years old or younger who shows the most potential." | Soren Valerius | 7 | KEEP-VERBATIM | +| "The Valerius family made Caius. … We can certainly make another." *(split by attribution beat)* | Soren Valerius | 7 | KEEP-VERBATIM | +| "Mistress, everything with the government and the military has been handled. In one month, The Commonwealth will officially grant Young Lord Alain Valerius his inheritance rights." | Quentin | 5 | COMPRESS | +| "Mistress, you have to let her see this through. This is what will build the Young Lord's foundation for the future. At the end of the day, this is a world where only the strong survive. Without real power, we can't protect what the Master left behind." | Elara | 18 | KEEP-VERBATIM | +| "You can't practice these three foundational sets at the same time. Trying to cause serious damage to your body." *(source sentence is garbled — kept exact)* | Number One | 12 | REVOICE | +| "But you're my host. Our contract binds me to you. I can't ever leave." | Little Four | 15 | KEEP-VERBATIM | + +⚠️ **The male-only inheritance law is NOT in this table because no one says it.** See thin-slot report. + +**SLOT 2 — THE MOCKERY-THAT-TEACHES** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Is the Valerius family too scared to take this bet? More cowardly than a woman like me?" | Seraphina | 8 | KEEP-VERBATIM | +| "I'm sure the military is also interested in cultivating the best possible talent, not just blindly following a bloodline." | Soren Valerius | 7 | KEEP-VERBATIM | +| "What's the matter, Soren? Getting nervous? … Afraid your chosen one can't beat my son?" *(split by attribution beat)* | Seraphina | 7 | KEEP-VERBATIM | +| "That won't be necessary. … I just hope you all pack quickly when it's time to leave Dominion." *(split by attribution beat)* | Seraphina | 8 | KEEP-VERBATIM | +| "As if a piece of junk that hasn't even developed artificial intelligence could ever fool me? Relax. Even if it could read your gender, I'd just change the data to say you're male." *(telepathic — single-quoted in source)* | Little Four | 8 | KEEP-VERBATIM | +| "This martial arts style is a joke compared to what's in the learning space. It wrecks the body. If it weren't for this tempering bath, any kid who practiced it would end up permanently damaged." | Little Four | 19 | COMPRESS | + +**SLOT 3 — THE SACRIFICE LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Oh, Caius… is this the military you gave your life for? The Commonwealth you died to protect? Did you ever imagine they would turn on you like this, abandoning your own child for their bottom line? Are you regretting it now, wherever you are?" | Seraphina | 7 | KEEP-VERBATIM | +| "Major General Caius Valerius may be gone, but his son shouldn't be bullied by his own flesh and blood. Surely the military has an opinion on that?" | Seraphina | 7 | KEEP-VERBATIM | +| "We must ensure that Major General Caius Valerius's sacrifice was not in vain." | Soren Valerius | 6 | KEEP-VERBATIM | +| "Caius, you have to keep your promise. Alaina and I will be waiting for you to come home." | Seraphina | 1 | KEEP-VERBATIM | + +*Note: the material family sacrifice (what they gave up) is absent — this slot carries only the father's life. See thin-slot report.* + +**SLOT 4 — CRUELTY-IN-COURTESY** *(the densest slot in the source)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "We must ensure that Major General Caius Valerius's sacrifice was not in vain. We are not denying Young Lord Alain Valerius's right to his inheritance. We are simply asking that the Valerius family choose its most outstanding child to receive the Major General's premium military benefits, so that the most suitable candidate can take up his unfinished duties." | Soren Valerius | 6 | KEEP-VERBATIM | +| "Madam Valerius, please rest assured. Regardless of the Major General's specific military legacy, young Alain will receive the full support afforded to the children of all our fallen heroes. The military does not allow the child of a hero to be bullied." | military representative | 7 | KEEP-VERBATIM | +| "Lady Valerius, it's not too late. Retract your wager, and the Valerius family will raise Alaina with the utmost care." | Soren Valerius | 8 | KEEP-VERBATIM | +| "This is the family's candidate. If young Lord Alain's biometrics are superior to this boy's, we will have no objections to his inheritance." | Soren Valerius | 7 | KEEP-VERBATIM | +| "The military must have brought an assessment device for this visit. If you wouldn't mind?" | Soren Valerius | 8 | KEEP-VERBATIM | +| "Mistress, please take the young lord into the VIP room," / "There is too much, riff raff here. You shouldn't be disturbed." *(two segments split by action tag)* | Quentin | 14 | KEEP-VERBATIM | +| "There's no need for that. We are only here to guide and instruct. Whether or not you appreciate it means nothing to us. You are apologizing to the wrong person." | Number One | 20 | KEEP-VERBATIM | +| "You still have that many honor points. Are you really going to waste them?" | Number One | 16 | KEEP-VERBATIM | + +**SLOT 5 — THE VICTIM-BLAMED BEAT** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Fine. If Lady Valerius has made up her mind, we won't force you to stay. From now on, whatever happens to Alaina is none of our business." | Soren Valerius | 8 | KEEP-VERBATIM | +| "Seraphina, are you out of your mind?" | Soren Valerius | 7 | KEEP-VERBATIM | +| "Seraphina Laine! You have a lot of nerve showing your face here!" | unnamed noblewoman | 14 | KEEP-VERBATIM | +| "And if she doesn't inherit? … Can I ask the same of you? That you and the child leave Dominion within a month?" *(split by attribution beat)* | Soren Valerius | 8 | COMPRESS | + +**SLOT 6 — THE PLAIN ANSWER / THE CHARGE SHEET** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "So this is the government. And this is the military. I see now." | Seraphina | 7 | KEEP-VERBATIM | +| "You dare come after Caius's legacy?" | Seraphina | 7 | KEEP-VERBATIM | +| "What is this, Soren?" | Seraphina | 7 | KEEP-VERBATIM | +| "And you really think some other Valerius child could ever compare to Caius's own flesh and blood? Need I remind you, my husband was an Imperator." | Seraphina | 7 | KEEP-VERBATIM | +| "Soren, … You know the way out." *(split by attribution beat)* | Seraphina | 8 | KEEP-VERBATIM | +| "Let. Go," | Seraphina | 14 | KEEP-VERBATIM | +| "Is there something you're not telling me?" | Alaina | 4 | KEEP-VERBATIM | +| "I only want this one. I don't need anything else right now." | Alaina | 16 | KEEP-VERBATIM | + +**SLOT 7 — THE DEADPAN ACCEPTANCE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I wouldn't ask for something I'm not willing to risk myself. Is the Valerius family too scared to take this bet? More cowardly than a woman like me?" | Seraphina | 8 | KEEP-VERBATIM | +| "Fine, … Have it your way." *(split by attribution beat)* | Seraphina | 8 | KEEP-VERBATIM | +| "Did I not tell you? I guess it just slipped my mind." | Little Four | 10 | KEEP-VERBATIM | +| "And since it's 'only that much,' does that mean I'm not in any danger?" *(curly quotes are the source's)* | Alaina | 10 | KEEP-VERBATIM | +| "Alright, stop it, … I'm not blaming you. It was just fate, I guess." *(split by attribution beat)* | Alaina | 4 | KEEP-VERBATIM | + +**SLOT 8 — THE ALL-IN WAGER** *(the spine — eps 7–8)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "If Alain inherits, then every other member of the Valerius family will be exiled from Dominion. Immediately. They go back to whatever rock they crawled out from under. If Alain does not inherit, then he and I will leave Dominion. Either way, as of today, we are no longer Valerius." | Seraphina | 7 | KEEP-VERBATIM | +| "Since you're so stubborn, fine. We agree to your terms. If Alaina inherits, the Valerius family leaves Dominion. But if the child we chose inherits, then Alaina leaves. For good. She will never be allowed back into Dominion, and she will be barred from joining any military system of the Commonwealth." *(source name slip: "Alaina" → fix to "Alain")* | Soren Valerius | 8 | KEEP-VERBATIM | +| "If that's how it's going to be, … then I, Seraphina Laine, demand a promise from the government and the military. Whether my son, Alain, inherits his father's legacy or not, he will be formally severed from the Valerius family, with no further connection to them." *(split by attribution beat)* | Seraphina | 7 | KEEP-VERBATIM | +| "Of course, … if you're willing to give up on the inheritance right now, I can be merciful and let you all stay in Dominion." *(split by attribution beat)* | Seraphina | 8 | KEEP-VERBATIM | +| "Afraid your chosen one can't beat my son?" | Seraphina | 7 | KEEP-VERBATIM | +| "Ten honor points extends your deadline by thirty days. In those thirty days, you may continue to practice The Nine Stances of Bodily Tempering. If you master it in that time frame, the punishment will be canceled. If you fail, the punishment is doubled." | Number One | 20 | KEEP-VERBATIM | +| "Will they really be wasted?" | Alaina | 16 | KEEP-VERBATIM | + +**SLOT 9 — THE COST-OF-BEING-RIGHT** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Psychological resilience: Triple S rank. Authorization granted for the highest level of Physical Skills training." | learning-space system | 11 | KEEP-VERBATIM | +| "First, congratulations on perfectly completing the foundational chapter of the advanced Physical Skills course," | Number One | 16 | COMPRESS | + +*Both are the same shape: she performs perfectly and the reward is a harsher regime. The **sharpest** instance — Elara reading her silence in the venom bath as "faulty pain receptors" and resolving to escalate the training until she feels "real" pain (Ep 18) — is **narration only**. See thin-slot report.* + +**SLOT 10 — THE WITNESS LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Caius, this is all I can do for your child. Hopefully, this keeps them off the military's radar for a while." | unnamed general | 11 | KEEP-VERBATIM | +| "God bless the Valerius family," / "God bless the Valerius family." *(repeated verbatim; second whispered)* | Quentin | 18 | KEEP-VERBATIM | + +*Nothing in eps 1–10. Quentin is built to be the witness and his recognition is entirely narrated there.* + +**SLOT 11 — THE UNCONDITIONAL LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Darling, stop torturing Mommy. Come out and meet me, please. Even if you're mad at me for making you live a different kind of life, you have to come out and yell at me for it, right?" | Seraphina | 2 | KEEP-VERBATIM | +| "I've got it. Boy or girl, our child will be Alaina Valerius. 'Alaina', it's close to your name, 'Laine.' That way, a part of you will always be with them." | Caius | 1 | KEEP-VERBATIM | +| "Alaina, my baby, Mommy is so, so sorry. From now on, you are the young lord of the Valerius family. You can \"only \" be the young lord of the Valerius family!" *(spacing artifact reproduced exactly)* | Seraphina | 5 | KEEP-VERBATIM | +| "Little Four, don't forget, I'm all alone in this world, too. So, if you're alone and I'm alone, let's just stick together. Partners." | Alaina | 15 | KEEP-VERBATIM | +| "That's not what I mean. I mean family. Like a brother and sister. Best friends. The kind of people who always have each other's backs, no matter what. The one person the other can always count on." | Alaina | 15 | KEEP-VERBATIM | +| "You can count on me." | Little Four | 16 | KEEP-VERBATIM | +| "What are you talking about? I'm your wife. This is a child I've been hoping for, too." | Seraphina | 1 | COMPRESS | + +**SLOT 12 — THE CLIFF LINE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Physical Fitness: S Rank / Spiritual Power: Tier Two / Potential: S Rank / Assessment Overview: Exceptional. Recommended for maximum priority development." *(four separate lines in source; a readout, not dialogue)* | military assessment device | 8 | KEEP-VERBATIM | +| "The results were far better than we ever could have hoped. Her metrics improved by thirty to eighty percent across the board." | Elara | 18 | KEEP-VERBATIM | +| "I need to know what you did last night besides sleep. This is important, Alaina! If I can figure out the cause, this could be a revolutionary discovery. Even with the advanced tech where I come from, it's impossible to completely heal bodily damage with medicine alone." | Little Four | 19 | COMPRESS | +| "Hmph. Let's go!" | Soren Valerius | 8 | KEEP-VERBATIM | + +⚠️ **No human authority ever speaks the impossibility.** The cliff function is carried by a machine and a servant. See thin-slot report. + +**SLOT 13 — THE POWERSTART CANDIDATE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Tell Uncle Quentin, … that Young Lord Alain Valerius and I are both fine." *(split by attribution beat — the erasure spoken as an order, seconds after birth)* | Seraphina | 2 | KEEP-VERBATIM | +| "You idiot! There's no such thing as a human soul, this is your spiritual self. If you don't get back in here right now, you're going to completely dissolve and just become part of the world's energy!" *(the first line of the series)* | Little Four | 1 | KEEP-VERBATIM | +| "Damn it, why won't this baby come out? We're losing amniotic fluid, and fast." | delivering doctor | 2 | KEEP-VERBATIM | +| "You dare come after Caius's legacy?" | Seraphina | 7 | KEEP-VERBATIM | +| "Seraphina Laine! You have a lot of nerve showing your face here!" | unnamed noblewoman | 14 | KEEP-VERBATIM | +| "Let. Go," | Seraphina | 14 | KEEP-VERBATIM | +| "Classify all information regarding Major General Caius Valerius's heir as an S class secret." | unnamed general | 11 | KEEP-VERBATIM | +| "Your mother is about to have an obstructed labor because of you! Pull your legs back, now!" | Little Four | 2 | KEEP-VERBATIM | +| "Bring this Young Lord an extra large steak!" | Alaina | 18 | KEEP-VERBATIM | +| "Little Four, you are so dead!" | Alaina | 10 | COMPRESS | + +**SLOT 14 — THE TYRANT'S COMMAND** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Since you're so stubborn, fine. We agree to your terms. … But if the child we chose inherits, then Alaina leaves. For good. She will never be allowed back into Dominion, and she will be barred from joining any military system of the Commonwealth." | Soren Valerius | 8 | KEEP-VERBATIM | +| "This is Caius Valerius's son, Alain Valerius. He, and he alone, will inherit everything that belonged to Caius." | Seraphina | 6 | KEEP-VERBATIM | +| "Very good. Classify all information regarding Major General Caius Valerius's heir as an S class secret. Access is restricted to the rank of General and above. Also, issue a gag order for everyone who already knows. The same team will handle all follow up on the heir." *(inverted use — the absolute order is protective)* | unnamed general | 11 | KEEP-VERBATIM | +| "You must. This is also one of your lessons." / "You have ten minutes to choose, or the system will make a random selection for you." *(two segments split by action tag)* | Number One | 16 | KEEP-VERBATIM | +| "Speak. Which do you choose?" | Number One | 20 | KEEP-VERBATIM | +| "Let the Valerius family's child go first." | Seraphina | 8 | KEEP-VERBATIM | +| "Who's first?" | military representative | 8 | KEEP-VERBATIM | + +**SLOT 15 — THE DEATH CLOCK** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I can only guarantee you two years without any issues. If you don't work hard to increase your body's resilience by then, you'll end up dead as a doornail!" | Little Four | 4 | KEEP-VERBATIM | +| "Training in The Nine Stances of Bodily Tempering. Eight stances mastered, mastery of the ninth stance at sixty nine percent. Mission incomplete. Punishment options: One, a deduction of two hundred honor points; lacking points can be compensated with other options. Two, corporal punishment, two hundred jolts of electric shock! Three, exchange honor points for an extension of the deadline; punishment will be doubled if the mission is still not completed. Please make your choice!" | learning-space system | 20 | KEEP-VERBATIM | +| "That said, I'm still having to restrain your spiritual power. Otherwise, even this body won't be able to take it." | Little Four | 4 | KEEP-VERBATIM | +| "No one knows where a wormhole will lead. I already told you that you were lucky. If we had arrived in a world worse than your own, you'd already be dead as a doornail." *(repeats the phrasing — a usable verbal motif)* | Little Four | 4 | KEEP-VERBATIM | +| "Reward. First item: time remaining from deadline, forty nine days, awards forty nine honor points. Second item: assessment results, perfect, awards one hundred honor points. Total of all items: one hundred forty nine honor points. Please confirm the receipt." | learning-space system | 16 | COMPRESS | +| "There isn't much time left. Have you chosen?" | Number One | 16 | KEEP-VERBATIM | + +⚠️ **The clock is resolved inside Ep 10** ("All those hidden issues are gone. No more trouble!"). Do not run it past the gene-agent beat without re-arming it. + +**SLOT 16 — THE FALSE WORLD-FACT** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "The Valerius family made Caius. … We can certainly make another." | Soren Valerius | 7 | KEEP-VERBATIM | +| "I'm sure the military is also interested in cultivating the best possible talent, not just blindly following a bloodline." | Soren Valerius | 7 | KEEP-VERBATIM | +| "She could be bluffing." | unnamed elder at Soren's side | 7 | KEEP-VERBATIM | +| "Even with the advanced tech where I come from, it's impossible to completely heal bodily damage with medicine alone." | Little Four | 19 | KEEP-VERBATIM | + +⚠️ **The load-bearing false fact — *no woman can pilot an Imperator* — is never spoken.** Highest-value authorship job in the source. See thin-slot report. + +**SLOT 17 — THE CONCEALMENT TAX** *(this show's core engine)* + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Uncle Quentin, we have to seal these results." | Seraphina | 3 | KEEP-VERBATIM | +| "Tell Uncle Quentin, … that Young Lord Alain Valerius and I are both fine." | Seraphina | 2 | KEEP-VERBATIM | +| "This is Caius Valerius's son, Alain Valerius. He, and he alone, will inherit everything that belonged to Caius." | Seraphina | 6 | KEEP-VERBATIM | +| "Are they going to figure out I'm a girl? Are they going to find you?" *(telepathic — single-quoted in source)* | Alaina | 8 | KEEP-VERBATIM | +| "Look, I'll rig the system during the tenth vial, … I'll make it seem like your body is hitting its limit." *(split by attribution beat)* | Little Four | 10 | KEEP-VERBATIM | +| "I was afraid the military guys would notice, so I didn't dare flush the impurities out through your pores. I routed them all to your bladder instead." | Little Four | 10 | COMPRESS | +| "Are you sure? What if they were just being over prepared? Only some kind of freak could absorb this much. We're just starting out here; it wouldn't kill us to fly under the radar for a bit." | Alaina | 10 | KEEP-VERBATIM | +| "Instructor Number One, I'm sorry. I've disappointed you." *(she absorbs the blame rather than explain why she trained slowly)* | Alaina | 20 | KEEP-VERBATIM | + +**SLOT 18 — THE IMPOSSIBLE ACCEPTANCE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Fine, … Have it your way." *(she accepts terms that would end her child's life as a citizen)* | Seraphina | 8 | KEEP-VERBATIM | +| "We agree to your terms." | Soren Valerius | 8 | KEEP-VERBATIM | +| "It's not like I have a choice. I have to keep going. I just, I really don't want to see Quentin and Elara look disappointed in me." | Alaina | 19 | KEEP-VERBATIM | +| "Yes. I chose Rabbit's Spring." | Alaina | 16 | KEEP-VERBATIM | + +**SLOT 19 — THE OVERHEARD VERDICT** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Mistress, everything with the government and the military has been handled. In one month, The Commonwealth will officially grant Young Lord Alain Valerius his inheritance rights." *(Alaina hears her own erasure finalised, unable to speak)* | Quentin | 5 | KEEP-VERBATIM | +| "Alaina, my baby, Mommy is so, so sorry. … You can \"only \" be the young lord of the Valerius family!" *(a verdict delivered to ears that shouldn't hear it)* | Seraphina | 5 | KEEP-VERBATIM | +| "Caius, this is all I can do for your child. Hopefully, this keeps them off the military's radar for a while." | unnamed general | 11 | KEEP-VERBATIM | +| "It seems the Young Lord inherited all of Master Caius's best physical traits," / "First, absorbing ten vials of the gene stimulating agent, and now this an even better result from the tempering bath." *(two segments split by action tag)* | Elara | 18 | KEEP-VERBATIM | +| "They decided if you weren't awake by tomorrow, they were sending you to the hospital. And from what I've overheard, that would be a huge problem." | Little Four | 5 | COMPRESS | + +*Structural note: **there is no door in this source.** Every overheard verdict is dramatic irony to the audience — the hero is a baby, asleep, or absent. She never listens at a keyhole because she cannot yet walk.* + +**SLOT 20 — THE WRONG EXPLANATION** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "She could be bluffing." *(sealed S-rank results re-explained as a desperate woman's bluff)* | unnamed elder at Soren's side | 7 | KEEP-VERBATIM | +| "It seems the Young Lord inherited all of Master Caius's best physical traits," | Elara | 18 | KEEP-VERBATIM | + +*Two more instances exist as unspoken thought (Ep 7: anyone with half a brain would have broadcast those results; Ep 10: what could a six-month-old possibly understand) — both are strong lines waiting to be written into a mouth.* + +**SLOT 21 — THE RECOGNITION DROP** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "Really?!" *(the one-word collapse; knees buckle, then tears)* | Quentin | 18 | KEEP-VERBATIM | +| "God bless the Valerius family," / "God bless the Valerius family." | Quentin | 18 | KEEP-VERBATIM | +| "Psychological resilience: Triple S rank. Authorization granted for the highest level of Physical Skills training." | learning-space system | 11 | COMPRESS | + +⚠️ **Nothing in eps 1–10.** Three separate collapse-into-deference beats occur there and all three are narrated, none spoken: the military rep's demeanour shift (Ep 8), both representatives deciding unanimously (Ep 8), the doctor sending his assistant to contact superiors mid-injection (Ep 10). Soren's `"Hmph. Let's go!"` is defeat, not recognition. + +**SLOT 22 — THE DEATHBED CHARGE** + +| Verbatim quote | Speaker | Ep | Flag | +|---|---|---|---| +| "I'm leaving the estate in your hands." | Caius | 1 | KEEP-VERBATIM | +| "I always keep my promises." *(his last line; he dies)* | Caius | 1 | KEEP-VERBATIM | +| "Caius, you have to come back alive," | Seraphina | 1 | KEEP-VERBATIM | +| "Don't worry, Caius, … I'll take good care of our estate." *(split by attribution beat — the vow she keeps in eps 6–8)* | Seraphina | 1 | KEEP-VERBATIM | +| "Boy or girl, our child will be Alaina Valerius." | Caius | 1 | KEEP-VERBATIM | + +*Variant form: the charge is given **before** the death and **to the wife, not the child**. Caius dies before Alaina exists and never speaks to her. There is no interrupted word.* + +--- + +## 3. HARVEST — IMAGES + +| Class | Image, verbatim-anchored | Ep | Flag | +|---|---|---|---| +| A | The erasure in one cut: "Mistress, the young mistress is healthy!" → "Tell Uncle Quentin, … that Young Lord Alain Valerius and I are both fine." → *the doctor "wiped the smile from her face"* | 2 | KEEP-VERBATIM | +| A | The newborn works one hand down to check her own body: *"Alaina painstakingly wiggled a tiny hand down to check between her legs."* → "It's flat. " | 5 | KEEP-VERBATIM | +| A | The disguise as an object fitted to a six-month-old: the prosthetic undergarment with *"the two soft, ball shaped inserts tucked inside"* | 9 | KEEP-VERBATIM | +| A | The name that can't decide: the household says "Young Lord," "the young master," and "Young Lord Alaina Valerius" in the same rooms | 18–19 | COMPRESS | +| B | The hand on the flat stomach at the parting — *"She took his hand and placed it on her flat stomach."* — answered by *"An almost microscopic particle appeared out of thin air and shot toward the Star of Arcion at the speed of light."* | 1 | KEEP-VERBATIM | +| B | The unborn child braces and refuses to be born — *"she instinctively splayed her legs to brace herself, stopping her descent cold"* — until her mother bargains with her, and she pulls her legs in | 2 | KEEP-VERBATIM | +| B | The AI dims himself to prime her body while she sleeps: *"Little Four's image in the learning space became much fainter."* — and never tells her | 11 | KEEP-VERBATIM | +| C | Two babies fed into the same military device in sequence, results in *"bold, glowing letters"* — the rival first, at the mother's own instruction: "Let the Valerius family's child go first." | 8 | KEEP-VERBATIM | +| C | The wager staged: stakes named to two state witnesses while *"her free hand gently covering Alain's small, chubby fingers"* | 7 | KEEP-VERBATIM | +| C | Public assault answered without a word: the woman *"grabbing Seraphina's shoulder"* → Quentin *"flicked a finger against her hand"* → she *"yelped in pain, stumbling back a step"* | 14 | KEEP-VERBATIM | +| D | The record of her worth, buried on purpose — Quentin *"scrambled over to snatch the printout from the machine. It was all there in black and white"*, then: "Uncle Quentin, we have to seal these results." | 3 | KEEP-VERBATIM | +| D | Ten thousand years of dead books as seed capital: *"a massive pile of books that had just materialized in the great hall of her mind space"* | 15 | KEEP-VERBATIM | +| D | The mother confessing to a photograph — *"She'd tearfully confess her regrets to a photo of Alaina's father, convinced she'd failed him by not raising their child right."* | 20 | COMPRESS | +| E | The system's mouth, first contact: the newborn sealed in a clear pod, *"beams of alternating red and green light"* sweeping her — then *"the pod let out a piercing alarm"* and goes quiet again as if nothing happened | 3 | KEEP-VERBATIM | +| E | The verdict inverted at the same instrument: "Physical Fitness S Rank, Spiritual Power Tier One, and Potential A Plus Rank" → "Physical Fitness: S Rank / Spiritual Power: Tier Two / Potential: S Rank" | 8 | KEEP-VERBATIM | +| E | The ring of sealed doors, one lit: *"One of the sealed doors was now glowing with an eye catching red light. Two words were emblazoned across its surface: Physical skills."* | 11 | KEEP-VERBATIM | +| E | The punishment menu read aloud to a six-year-old — 200 points, 200 shocks, or a paid extension at double stakes | 20 | KEEP-VERBATIM | +| F | The kneel by proxy: *"Quentin's knees nearly buckled with relief"* at a number, then tears, then "God bless the Valerius family." | 18 | KEEP-VERBATIM | +| G | A baby produced as an object to displace a baby: *"Soren gestured to a woman holding a boy of about one"* → "This is the family's candidate." | 7 | KEEP-VERBATIM | +| G | The needle and the ten tubes — escorted by top mechas; by the eighth *"his forehead was slick with sweat, and his once steady hands had started to tremble"*; on the tenth, *"with just a few drops left, he couldn't push any more in"* | 9–10 | KEEP-VERBATIM | +| G | The tub of inky green liquid in an empty room — *"a little more than half full of an inky green liquid that gave off a strong, herbal smell"* — and the child in it: *"The searing pain sent her small body into uncontrollable spasms"* | 17–18 | KEEP-VERBATIM | +| H | **EMPTY — no destroyed token in eps 1–20.** Nothing the hero loves is broken in public. Nearest ore is the *withheld* token (the sealed printout, Ep 3) — a hidden thing, not a destroyed one. See thin-slot report. | — | — | + +*Runner-ups cut for slot count: the transparent landing pad with "a sheer drop of hundreds of stories" beneath (Ep 14) · the baby folded into the first stance, "two little feet tucked between her tiny hands and resting against her head" (Ep 13) · combat poses held at the dinner table (Ep 20) · tears clinging to her eyelashes that her mother never notices (Ep 14).* + +--- + +## 4. HARVEST — EXCHANGE SHAPES + +**a) The wager escalation ladder** (Eps 7–8, Seraphina ↔ Soren, two state witnesses) — flag KEEP-VERBATIM. +Reasonable-sounding proposal ("We are simply asking that the Valerius family choose its most outstanding child…") → bloodline counter ("Need I remind you, my husband was an Imperator.") → total counter-stake naming both sides ("If Alain inherits, then every other member of the Valerius family will be exiled from Dominion. Immediately.") → the private whisper that reframes it as desperation ("She could be bluffing.") → public acceptance with a crueller counter-stake ("she will be barred from joining any military system of the Commonwealth") → the instrument runs → the loser dismissed ("You know the way out."). **This is the source's spine and its single most reusable shape.** + +**b) The deflection ladder against authority** (Ep 7, Seraphina ↔ military rep ↔ government official) — flag KEEP-VERBATIM. +Appeal to duty ("Surely the military has an opinion on that?") → pleasant institutional non-answer ("The military does not allow the child of a hero to be bullied.") → the second official's silence → contempt spoken flat ("So this is the government. And this is the military. I see now.") → both smiles freeze. *Silence is the third participant.* + +**c) Mercy-offer-refused, mirrored** (Ep 8, Soren ↔ Seraphina) — flag KEEP-VERBATIM. +She offers him the exit first ("if you're willing to give up on the inheritance right now, I can be merciful") → refused → he offers her the exit at his high-water mark ("it's not too late. Retract your wager") → refused → measurement → reversal. *The same courtesy runs twice, in both directions, and neither takes it.* + +**d) Plea into erasure** (Ep 2, Seraphina → unborn Alaina → the room) — flag KEEP-VERBATIM. +One-sided bargaining with a child who can hear ("Even if you're mad at me for making you live a different kind of life, you have to come out and yell at me for it, right?") → compliance → the birth cry → the immediate public renaming order to staff ("Tell Uncle Quentin, that Young Lord Alain Valerius and I are both fine."). *Intimacy and erasure in one unbroken run — the show's thesis in ninety seconds.* + +**e) The withheld-truth interrogation ladder** (Ep 4, reprised comically Ep 10, Alaina ↔ Little Four) — flag KEEP-VERBATIM. +Demand for identity → wary credential recital ("Mecha learning device number four-four-four-four…") → dismissive brag → the suspicion beat ("Is there something you're not telling me?") → confession → the confessor's panic → forgiveness. The Ep-10 reprise runs the identical turns and lands on deadpan ("Did I not tell you? I guess it just slipped my mind."). *The show's house pattern, not a one-off.* + +**f) The bait-the-spend wager stack** (Eps 16–17, Number One / system ↔ Alaina) — flag KEEP-VERBATIM. +Payout announced → rules explained with a loaded word → the probe ("Does that mean honor points aren't easy to come by?") → answered with silence → a forced ten-minute clock → the hero underspends ("I only want this one.") → the scoff ("Are you really going to waste them?") → the counter-question ("Will they really be wasted?") → the clock expires → the system pays off. *Trap → probe → silence → deadline → refusal → counter-stake → vindication.* + +**g) Punishment menu → all-in wager** (Ep 20, system / Number One ↔ Alaina) — flag KEEP-VERBATIM. +Verdict with a percentage ("mastery of the ninth stance at sixty nine percent. Mission incomplete.") → three-option punishment menu → the command to answer ("Speak. Which do you choose?") → the hero asks terms on option three → terms named with the downside doubled → the choice taken in silence → exit on a threatening glare. + +**h) Result-reveal ladder into the wrong explanation** (Ep 18, Quentin ↔ Elara) — flag KEEP-VERBATIM. +Anxious question ("How did it go?") → the number ("thirty to eighty percent across the board") → disbelief ("Really?!") → confirming nod → collapse into awe ("God bless the Valerius family") → **the credit misassigned** ("It seems the Young Lord inherited all of Master Caius's best physical traits"). *Recognition and erasure in the same breath — the show's whole engine in six turns.* + +--- + +## 5. THE THIN-SLOT REPORT (authorship map) + +- **SLOT 1 / SLOT 16 — THE LAW IS NEVER SPOKEN. The single highest-value authorship job in the source.** Both load-bearing rules live only in narration: *"only male family members could inherit"* (Ep 2) and *"Not a single woman, no matter how much she trained or built up her muscle mass, could withstand that kind of recoil"* (Ep 3). W3 must put one of them in an authority's mouth — the government representative and Soren are the two available mouths, and Soren is the better one because he can weaponise it. **Without this line the promo has no stated injustice, only an implied one, and the injustice engine will not fire.** +- **SLOT 21 — THE RECOGNITION DROP: MISSING in eps 1–10, weak overall.** Three collapse-into-deference beats occur and all three are narrated. This is also structurally *correct* for the show — she is hiding, so nobody may recognise her — which makes it the withheld payoff, not a defect. W3 authors the drop as **promise, not event**. The verbatim anchor for what recognition will look like is the machine's own reversal at Ep 8. +- **SLOT 9 — COST-OF-BEING-RIGHT: present in shape, absent in dialogue.** The show's sharpest instance — Elara reading her silence in the venom bath as *"faulty pain receptors"* and resolving to escalate the training until she feels *"real"* pain (Ep 18) — is narration, and the narrator explicitly flags it as the seed of future suffering. **Author this as a spoken line.** It is the cruellest ACT → PUNISHMENT in twenty episodes and it is currently unusable. +- **SLOT 3 — SACRIFICE LINE: partial.** The father's life is covered; the *material* family sacrifice is absent. Nobody says what this cost them. +- **SLOT 7 — DEADPAN ACCEPTANCE: eps 1–10 only.** All five instances are Seraphina or Little Four. Alaina herself never gets one, because she is pre-verbal for most of the band. +- **SLOT 22 — DEATHBED CHARGE: variant only.** Caius dies before she exists and speaks only to his wife. There is no interrupted word and no charge to the hero. The function is real but displaced. +- **IMAGE CLASS H — DESTROYED TOKEN: EMPTY.** Nothing the hero loves is broken in public in twenty episodes. Ask the operator whether to author one; the sealed printout (Ep 3) is the obvious candidate object. +- **No antagonist supply after Ep 8.** Soren exits in Ep 8 and never returns; the Ep-14 noblewoman gets two lines. Eps 11–20 have **no human antagonist at all** — the pressure comes from institutions (the clock, the bath, the martial-arts quota), none of which can be insulted, negotiated with, or made to recognise her. **Any build weighted toward eps 11–20 will be short of an opposing face.** +- **Every triumph is private.** Triple-S rank: one instructor. Record bath metrics: two servants in a corridor while she sleeps. The Ep-20 mastery: nobody. **There is no room to go silent anywhere in eps 11–20.** The only public room in the entire source is the Ep 7–8 inheritance hall — build there. +- **Structural ruling:** run the master arc **PRICING-BY-CATEGORY → THE WAGER → RE-PRICING → THE TAX**, which the source supports verbatim end to end within eps 1–8. Do not end on the win; end on the cost of it. + +--- + +## 6. FREE HARVEST (≤10) + +1. **"Mecha learning device number four-four-four-four-four-four-four-four-four, from the Mechanical Kingdom of the Mandora star system. And also, your contracted long-term companion."** (Little Four, Ep 4) — nine spelled-out "four"s. An audio gift; reproduce exactly. +2. **"It's flat. " … "Thank God, I'm still a girl."** (Alaina, Ep 5) — the entire premise landing in a newborn's private relief, seconds after her mother renames her. The best cold-open button in the source. +3. **"Darling, stop torturing Mommy. Come out and meet me, please. Even if you're mad at me for making you live a different kind of life, you have to come out and yell at me for it, right?"** (Seraphina, Ep 2) — an apology, permission to be hated, and love, delivered pre-birth. The hardest line in the corpus. +4. **"Whoo, good thing I'm quick! Otherwise, they would've found out my host's secret. When I meet her later, she'd better praise me big time for this, hehe!"** (Little Four, Ep 3) — the save happens *inside* the pod alarm; the audience knows before the room does. +5. **"I taste something delicious! I know this taste! No, wait something's wrong. Ugh, what is this garbage? It's full of junk! It completely ruins the flavor!"** (Little Four, Ep 9) — a serum worth more than cities, reviewed as a cheap knockoff, mid-injection. +6. **"Bring this Young Lord an extra large steak!"** (Alaina, Ep 18) — the disguise spoken aloud by a four-year-old who has just resolved to diet. +7. **"Hey, don't think you can bribe me just by being nice! I, Little Four, am a being of high moral character! I'll never compromise my principles, no matter what."** (Little Four, Ep 11) — the companion's whole engine in one breath. +8. **"Whoever controls the information, controls everything."** (Little Four, Ep 15) — the AI's stated rationale for wanting the net; sits oddly and brilliantly in a toddler's mouth. +9. **"And the other four percent. Why does it feel so familiar? Is it poison? Yep, looks like some kind of snake venom. And what's this? Scorpion? A centipede, and spider venom!"** (Little Four, Ep 17) — the family's secret formula priced in horrors, as an escalating list. +10. **"Back in the hovercar, when Valerius Seven spoke, I thought I'd finally found one of my own kind in this world. I was so happy. I've never met anyone like me since leaving Mandora. It's been lonely."** (Little Four, Ep 15) — the loneliness confession that upgrades the bond from contract to family. *(Source has a double space in "Valerius Seven.")* + +--- + +## FINDINGS (standing enforcement — seeded) + +| ID | Note | Status | Enforcement | +|---|---|---|---| +| F-401 | No pipeline run on this ledger yet; the thin-slot report above is the standing authorship map | OPEN | First W3/W4 run on RotHC ships its checklist against this ledger, every row placed or declined-with-reason; W5 appends real findings | +| F-402 | **The male-only inheritance law is never spoken in twenty episodes.** Without it in a mouth, the promo has an implied injustice and no stated one | OPEN | Every build authors the world-rule line into an authority's mouth (Soren preferred) and the checklist verifies it by quote in the first 60 seconds | +| F-403 | **No witness speaks at any re-pricing.** All three recognition beats are machine readouts or narration | OPEN | Any build using a re-pricing authors spoken reactions; checklist verifies at least one human line lands inside the beat | +| F-404 | Alaina's canon register is *dry, self-deprecating, allergic to attention* — an adult's patience in a child's mouth. She argues against her own displays of power ("it wouldn't kill us to fly under the radar for a bit") | OPEN | No block gives Alaina heroic declaration or system-speak; her longest speeches are to Little Four, never to a room | +| F-405 | Eps 11–20 contain no human antagonist and no public room | OPEN | Builds weighted past Ep 10 must import the Ep 7–8 hall or author an opposing face; checklist flags any promo whose midsection has no speaking antagonist | +| F-406 | The Ep-4 death clock is **resolved inside Ep 10** | OPEN | Any build running the clock past the gene-agent beat re-arms it explicitly, or drops it | +| F-407 | Source defects: the Ep-8 "Alaina"/"Alain" name slip in Soren's dialogue; the spaced-quote artifact around interior monologue | OPEN | Checklist verifies no build ships the slip or the artifact | diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_WBT_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_WBT_v1.md new file mode 100644 index 0000000..a14717e --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/Ledger_WBT_v1.md @@ -0,0 +1,216 @@ +# LEDGER — WBT "Weakest Beast Tamer" · v1 (SAMPLE — the source-first build) + +*Required input for every W3/W4 run on this show. Scope: lines, images, exchange shapes — **never narration blocks**. Built from **source material first** (eps 1–20 = canon = LOCKED) and **five cracked scripts** (= PROVEN): Five Exams (Chen) · UK Cold Open (Indranil) · SSS Dragons (Silan) · Egg Boy (McFarland) · Field Trial (Silan). Each run's Reviewer Checklist records every row as placed or declined-with-reason; a silent drop is a defect.* + +*This is the template build: canon anchors the world's voice; the cracked scripts prove which moments convert. Where five different writers independently kept the same element, that element is the formula — the CONVERGENT CORE below is the most load-bearing table in the file.* + +## THE CONVERGENT CORE (kept by N of 5 cracked scripts — this is what wins) + +| Element | N/5 | Canon root | +|---|---|---| +| Parents sold everything (house/savings) for the egg + tuition | 5/5 | Ep 1–3 | +| The gray egg — cheapest sold — hatches the spore, weakest beast ever recorded (the 0.01%) | 5/5 | Ep 1 | +| Mushrooms sprout from his head → "rotting boy" / "fungus freak" mockery | 5/5 | Ep 2 | +| Knowledge-not-strength is the power: he sees weaknesses, evolution paths, what no master knows | 5/5 | Ep 10–11 | +| Public ceremony/evaluation humiliation — the crowd laughs as a character | 5/5 | Ep 1–2 | +| The bully (Jin/Klein) steals, smashes, or weaponizes the egg/crystals in front of everyone | 4/5 | Ep 15–16 (carriage) | +| Authority (Prof. Wei) punishes Ren for being right, or works to expel him | 4/5 | Ep 20 | +| The forest gamble → the miracle plant/half-flower → the awakening | 4/5 | Ep 5–10 | +| The Mirror Mantis (mirror-plated, blind-seam weakness) | 4/5 | Ep 7–9 | +| Luna intervenes once, then watches with calculating curiosity — never warmth yet | 4/5 | Ep 16–17 | +| Cliff on an authority recognizing something impossible (Zhao's protégé offer · "What in the world are you?") | 3/5 | — (promo-native) | +| Being right costs him: begging, failed exams, "cheater" — the knowledge is punished before it is believed | 3/5 | Ep 20 | + +## HARVEST — LINES + +### Canon (eps 1–20) — LOCKED + +| Line | Speaker | Ep | +|---|---|---| +| "The Ceremony of Ten Years begins now. The beasts will take the mana poisoning your young bodies and save you." | Ceremony Master | 1 | +| "Remember, your beast's rank determines your place in our society. Iron for the slaves, Bronze for the workers, Silver for the privileged." *(reused verbatim in 2 cracked scripts — the world-rule line)* | Ceremony Master | 1 | +| "Look at the failure's egg! I bet it can't even summon a decent frog!" | Klein Goldcrest | 1 | +| "The zero point zero one percent. He really got the zero point zero one percent." | Crowd murmur | 1 | +| "Look! He's rotting!" / "Careful, it's contagious!" / "Don't get too close or you'll grow mushrooms too!" | Crowd of children | 2 | +| "Pathetic. It's the only known beast that grants no base power. Just that miserable ten percent physical strength boost." | Crowd murmur | 2 | +| "My little tamer." | Mother | 3 | +| "Oh, my child. It's not your fault. It will never be your fault." | Mother | 3 | +| "Remember when I burned an entire batch of bread last year?" / "We cut it into cubes and turned it into croutons." / "Sometimes life doesn't give you what you expect. But that doesn't mean you can't make something good with what you have." | Father / Ren / Father | 3 | +| "You're our son. It doesn't matter if you have a spore or a dragon." | Father | 3 | +| "At least dragons respect their subjects. Unlike humans." | Ren | 5 | +| "If you're going to follow me on this journey, you'd better at least not get in my way." | Ren (to the spore) | 5 | +| "You are still the weakest beast that exists. But thanks. I guess." | Ren | 7 | +| "At least you're good for something. Even if just as a lamp." | Ren | 8 | +| "They're not symbols. They're spores. Dormant spores." | Ren | 9 | +| "I just wanted… wanted you to be proud." / "We always have been. Always." | Ren / Mother | 12 | +| "Because I've tried it. All bakers have tried it. We look for shortcuts at first, but with time you learn that some processes simply need their time." / "I'd show them two loaves: one with two hours of rest and one with twelve. The proof is in the result." / "This isn't about bread, is it?" | Father / Father / Father | 14 | +| "I promise that if you trust me and follow exactly what I tell you for a thousand days, your plants will reach the power of a Bronze rank two beast." | Ren | 14 | +| "Of course we'll do it. Every day, without fail." / "A thousand days. We promise." | Mother / Father | 14 | +| "Remember, don't miss a single day." | Ren (parting) | 14 | +| "Are those glowing mushrooms on your head? Can't you at least hide them? It's disgusting." | Eagle girl | 15 | +| "Your spore is so weak it has to cling to your head to move." | Scale boy | 15 | +| "At least my mushrooms glow. Your spirit tiger has a cultivation defect that makes its fur opaque." | Ren | 15 | +| "Is that all?" | Ren (dodging Jin) | 16 | +| "Can't even manage to hit the weakest one with your 'superior' beast? Maybe mushrooms aren't so pathetic after all." | Ren | 16 | +| "Three against one?" | Luna (entrance) | 16 | +| "Manners? Three beasts with Silver potential against the weakest of all. How pathetic." | Luna | 16 | +| "And that makes you feel threatened? A Silver rank beast threatened by the weakest of all? That makes you sound more pathetic than him." | Luna | 16 | +| "Get out of here. All of you." | Luna | 16 | +| "I didn't do it for you. I did it because I dislike those who abuse their power." | Luna | 17 | +| "I won't. My spore isn't weak. And I'm going to prove it." | Ren | 17 | +| "Delusion or courage? Very interesting." | Luna (to herself) | 17 | +| "We'll see if that confidence of yours lasts at least the first year. Though I doubt it." | Luna | 17 | +| "Rank isn't everything. History is full of tamers who achieved the impossible with seemingly weak beasts." | The Director | 17 | +| "No offense, but nobody's going to waste resources like that on a spore." | Liu | 18 | +| "Then you'll have to find a way to prove it. But I warn you, the Academy doesn't waste resources on empty hopes and promises." | Liu | 19 | +| "And your spore, well, at least it glows pretty." | Min | 19 | +| "Oh? The student with the spore has something to contribute about cultivation?" | Prof. Wei | 20 | +| "I see we have another 'expert' who thinks he knows more than generations of research." | Prof. Wei | 20 | +| "The texts have been proven by generations. To suggest they're wrong based on what exactly? Readings in a story?" | Prof. Wei | 20 | +| "The digger beetle is a classic example of a beast with mediocre natural limits. None has surpassed Bronze rank in the more than five hundred years we have of species documentation." | Prof. Wei | 20 | + +### Cracked scripts — PROVEN + +| Line | Speaker | Script | +|---|---|---| +| "Thank you for mining crystals for me." | Klein | Five Exams | +| "I really had you believing that, didn't I, mushroom head?" | Klein | Five Exams | +| "Klein, please. I can't fail these five exams." / "Sorry. But I can't fail them either." | Ren / Klein | Five Exams | +| "How'd a gray badge like you even find so many crystals? You don't even have a beast strong enough to break the crystals." / "I just looked where no one else does." / "Wrong answer, rotting boy. Tell me how, or you go home empty." | Kai / Ren / Kai | Five Exams | +| "Last chance. A gray-badge loser like you doesn't out-gather a single one of us, ever. So either you cheated, or you've got a secret. Tell me which, and maybe I leave you one handful to log." / "I got lucky. That's all." / "Then you don't have anything at all." | Kai / Ren / Kai | Five Exams | +| "He probably stole them. Those with weak beasts steal." / "Search the mushrooms. Maybe they're growing out of his ears too." | Crowd | Five Exams | +| "Good. Put them in your basket, Kai, not his. He never had them." | Klein | Five Exams | +| "I heard your parents sold their house for this. The whole house, for one hopeless boy and a spore for a beast. That's like, so tragic." | Klein | Five Exams | +| "Don't talk about them." | Ren | Five Exams | +| "They're old. They have nothing left to sell. So when the academy throws you out, you'll walk all the way home to tell two old cooks that the house bought you nothing. Like I said, tragic." | Klein | Five Exams | +| "Try not to fail the next one. Your weak spore is only funny until it's just sad." | Klein | Five Exams | +| "Look at him. The rotting boy found the herb before any of us. Read the whole monster too, I'd bet. And he still can't lift a finger to save himself." | Kai | Five Exams | +| "Kai. The arm locks before it strikes. Hit it then and it goes down. I'm telling you exactly how." / "That's the funny part, gray badge. You know exactly how. You just can't do it. What good is a head full of answers when a herb-cutter could put you in the dirt?" | Ren / Kai | Five Exams | +| "Beg me to do the one thing all your knowing can't. Beg loud — so even Klein can hear it." | Kai | Five Exams | +| "Please. Please, help me. I'm begging you. Hit it where I told you. Please." *(on his knees — the price of being right)* | Ren | Five Exams | +| "The records were written by Silver masters before your parents were born. You have nothing but a grey badge and a weak beast, and you are trying to correct me?" | Wei | Five Exams | +| "A boy with the worst beast in the history of this Academy does not know more than the masters. You simply lack the shame to be quiet about it." | Wei | Five Exams | +| "So the masters were fools, and the rotting boy is wise." | Wei | Five Exams | +| "Cultivation Theory. Failed. For arrogance." | Wei | Five Exams | +| "Ren, stop. Don't. You're making it worse for both of us." | Taro | Five Exams | +| "Oh my god. The nerd failed the nerd test." | Kai | Five Exams | +| "Money bought this lizard, rotting boy. Money bought me tutors before I could read. What did your house buy? A cracked egg and a spore." | Kai | Five Exams | +| "Stay down, kitchen boy. Nobody'll blame you." | Crowd | Five Exams | +| "He didn't even hit him hard. He hit him once." | Crowd (stunned) | Five Exams | +| "The rotting boy cheated. Make him prove it. Make him fight someone he can't touch." *(whispered, crawling)* | Kai | Five Exams | +| "Well, we make the rules, so if we say you need to win another duel, then you must win another duel." | Prof. Yang | Five Exams | +| "Read him, gray. Go on. Read the Golden Lion the way you read me. Let's all watch." | Kai | Five Exams | +| "I have watched you all day. You found an herb while everyone else struggled. You discovered a flaw in cultivation theory a Silver master swore did not exist. … So show me one more thing." / "Impress me, and I will take you as my protégé." / "Good luck." | Zhao | Five Exams | +| "The loaf does not rise because you are strong, it rises because you know the moment to fold it." *(father's kitchen doctrine — canon-bred, script-phrased)* | Father (memory) | Five Exams | +| "I'm going to send you home to your mummy in a hundred different pieces." | Blood Ring opponent | UK Cold Open | +| "Yeah. What do you want your headstone to say?" *(whispered, smiling — the inversion)* | Ren | UK Cold Open | +| "Two versus one? That's really brave of you Jin. Does it make you feel big and strong?" | Luna | UK Cold Open | +| "The blood will draw it out." / "Draw what out?" / "The Hydra." | Jin / Ren / Jin | UK Cold Open | +| "We'll say we tried to save you! It was a tragic accident. The rotting boy with the weakest beast in history, dead in the forest. Nobody will be surprised." | Jin | UK Cold Open | +| "Your mum? She'll cry for a week, then move on. Trust me, Ren. She'll be glad that you won't hold her back anymore." | Jin | UK Cold Open | +| "Of course YOU would get a Cloud Spore, Ren! You have the worst luck in the world!" | Klein | SSS Dragons | +| "I'm sorry, Ren. But you truly have the worst beast there is. It doesn't evolve, and its absurdly low rating will resign you to a life of poverty, working in the mines with your worthless beast." | Ceremony Master | SSS Dragons | +| "Look — he's growing a garden from his head!" | Klein | SSS Dragons | +| "Ren, no matter what happens, you're still our miracle child." / "You will ALWAYS be our little miracle." | Father / Mother | SSS Dragons | +| "It's not your fault but… why did I have to hatch you?" | Ren (to Cloud) | SSS Dragons | +| "Leave, Cloud! You did your best. I'm sorry I ever doubted you." / "I spent the entire day blaming you for my problems. Maybe I should've just put my trust in you this whole time." / "But I was wrong, Cloud! I'm putting my trust in you now!" | Ren | SSS Dragons | +| "I don't know what your secret is, Cloud… But you're a miracle." | Ren | SSS Dragons | +| "If my egg doesn't hatch today, I'll die before I hit puberty." *(powerstart)* | Ren (V.O.) | Egg Boy | +| "When my egg finally hatched, everyone laughed. They called it the weakest beast in history. They had no idea how wrong they were." *(powerstart)* | Ren (V.O.) | Egg Boy | +| "If you can't hatch an egg on your own, you're a poor loser who doesn't deserve a beast." | Cass | Egg Boy | +| "A grey egg like this has exactly three possibilities. An Iron-rank common plant. A Bronze-rank marsh frog. Or worst of all… a spore that can't even achieve any rank at all. A worthless egg for a worthless student." | Wei | Egg Boy | +| "This egg is either a dud or it's housing something that's better off dead." | Wei | Egg Boy | +| "You'll be on your death bed before you hit puberty. And the Academy won't waste medical resources on expelled students." | Wei | Egg Boy | +| "Honestly? If I were you, I'd keep the boy home. Let him die in the company of his loved ones. If indeed you love such a disappointing child at all." | Wei (at the family door) | Egg Boy | +| "I'd listen to your parents, Ran." / "It's Ren." | Wei / Ren | Egg Boy | +| "Sweetheart... the egg has had months. If it was going to hatch, it would have hatched by now." *(his own mother — the hardest line in the corpus)* | Mother | Egg Boy | +| "I know you're scared. I'm scared too. But we don't have anyone else. It's just you and me." | Ren (to the egg, under countdown) | Egg Boy | +| "Come out. Please. Be a frog. Be a plant. I don't care what you are, I'll take care of you no matter what. Just don't leave me alone up here." | Ren | Egg Boy | +| "Tiny parasites on your head. Very interesting. Thank you for showing us your beast power, Ren. You're expelled. Next!" | Director Aurelius | Egg Boy | +| "Justice is served." *(slow-clap)* | Jin | Egg Boy | +| "Sorry, Ren. You deserve to be here." | Taro | Egg Boy | +| "That's the thing people don't get about mushrooms. They're not parasites, they're symbiotes. They make the things around them stronger." | Ren | Egg Boy | +| "The prettiest girl in the Academy had two rules: don't talk to her, and don't look at her cat. Ren broke both." *(narrator hook)* | Narrator | Field Trial | +| "This thing has been dead for weeks. You'll be lucky if a turd's inside!" | Jin | Field Trial | +| "Alright you mutt, clearly you want it. So go fetch!" | Jin | Field Trial | +| "Get it yourself. If you can't get through this – what chance do you have at surviving the Field Trial?" | Wei | Field Trial | +| "Check it out – live target!" | Senior students | Field Trial | +| "Jin, that was excessive… but you're right. Ren – a crack means a dead egg. It's over." | Wei | Field Trial | +| "Dead egg! Dead egg!" *(chant)* | Students | Field Trial | +| "Egg. Beast. Whatever's inside. My family has nothing left. You're all we have left. Don't die. Please." | Ren (on his knees) | Field Trial | +| "Together, we're going to prove them wrong again and again. Until they take us seriously. I promise." | Ren | Field Trial | +| "Cloud. I'm calling you Cloud." | Ren | Field Trial | +| "Nice mushrooms, farm boy." / "Thanks. Grew them myself." *(deadpan acceptance — same shape as Erin's "I'll be right here.")* | Jin / Ren | Field Trial | +| "If you return empty handed, you're expelled. If you do not return at all… we'll notify your families." | Wei | Field Trial | +| "Remember, Ren. Wild beasts are drawn to blood. At least that's what I'm hoping." | Jin (leaving him tied) | Field Trial | +| "You didn't save me – you cheated!" | Jin | Field Trial | +| "Admit it or I'm paying your mother a visit – punishing her for raising such a sneaky, lying boy." | Jin | Field Trial | +| "Jin, there's a weak spot between the plates! Stab it!" / "Where? I don't see it!" / "Now, Jin!" | Ren / Jin / Ren | Field Trial | +| "Ancient grove moss... No. There's no way an Academy student could locate the Ancient Grove!" / "You must have been given prohibited knowledge. That's the only explanation!" | Wei | Field Trial | +| "My family gave me everything for this chance. So I'll bet everything too. Cloud can evolve this beetle." | Ren | Field Trial | +| "If I'm wrong — send me to the Dreaddeath Mines. But if I'm right, you let me stay. No matter what — just don't harm my beast." | Ren | Field Trial | +| "Dreaddeath? Nobody walks out of there alive." | Student murmur | Field Trial | +| "Cloud, look at me. It's just you and me. I know we can do this. I believe in you, buddy. You're special." | Ren | Field Trial | +| "I knew it." | Luna | Field Trial | +| "Ren Patinder. What in the world are you?" *(whispered — cliff line)* | Wei | Field Trial | + +## HARVEST — IMAGES + +| Image | Provenance | Status | +|---|---|---| +| The gray egg among blues, greens, reds — "Not white. Not black. Not even brown. Gray. The color of failure." | Ep 1 | LOCKED | +| The crack: "a dry, pathetic sound, like a twig snapping" — against Ron's egg bursting into flames | Ep 1 | LOCKED | +| Luminescent mushrooms sprouting through his hair, one wet pop at a time | Ep 2 · all 5 scripts | LOCKED | +| The three candles on the celebration feast going cold, untouched, while the parents weep over the contract | Ep 3 | LOCKED | +| The rope tied to the bedpost; the window descent under twelve moons | Ep 5 | LOCKED | +| The father's map, obsessively detailed, drawn by a man who swore never to go back | Ep 6 | LOCKED | +| Moon Toads' three hypnotic eyes — and the mushrooms answering with the same light pattern | Ep 7 · 3 scripts | LOCKED | +| The Mirror Mantis with cracked, misaligned plates — a broken mirror that hunts | Ep 7–9 · 4 scripts | LOCKED | +| The tunnel "symbols" detaching from the walls — dormant spores, waking hungry | Ep 9 | LOCKED | +| The golden cloud consuming a Bronze beast down to plates and mold | Ep 9 | LOCKED | +| The miracle plant under crystal light; eating it; the white light that makes the infection fall away like ash | Ep 10 · 4 scripts | LOCKED | +| A child's hands holding ~500 small mana crystals — years of garden gleaning offered as proof | Ep 14 | LOCKED | +| The mother's vines wrapping him at the forest edge before she sees who it is | Ep 12 | LOCKED | +| Klein's boot into the gut; the basket of crystals spilled; a golden paw sweeping them away | Five Exams | PROVEN | +| Ren kneeling over an empty basket, dirt on his palms, laughter at his back | Five Exams | PROVEN | +| Ren on his knees begging Kai while the Mantis's scythes rise over him | Five Exams | PROVEN | +| The one green scale on Kai's ribs — the wrong color, the only flaw in a fortune | Five Exams | PROVEN | +| The live rankings board: "Odds of me winning, one hundred to one. Odds of me dying, two to one." | UK Cold Open | PROVEN | +| The egg tossed in a keep-away triangle; punted; the first hairline fracture | Egg Boy | PROVEN | +| **The tear rolling into the egg's crack — and the hatch answering it** (love as the catalyst, staged) | Field Trial | PROVEN | +| The ranking scroll's text racing, trying to form a reading — then collapsing | Field Trial | PROVEN | +| Ren tied to the pine tree, arms and legs pulled apart, blood drawn to bait the forest | UK Cold Open | PROVEN | + +## HARVEST — EXCHANGE SHAPES + +| Shape | Pattern | Provenance | +|---|---|---| +| The false-friend theft | kindness offered → theft executed → "I really had you believing that" | Five Exams (Klein) | +| The interrogation ladder | question → deflection → escalating ultimatum → refusal → total loss ("Then you don't have anything at all.") | Five Exams (Kai) | +| Beg-loud | he gives the answer free → mocked for knowing → forced to kneel and beg → helped at the price of his dignity | Five Exams (ravine) | +| The heretic's correction | student corrects authority → authority doubles down → punished *for being right* → "So the masters were fools, and the rotting boy is wise." | **canon Ep 20** + Five Exams (Wei) | +| The bread proof | analogy question ladder ("why twelve hours?") → "This isn't about bread, is it?" → the impossible promise → "Every day, without fail." | **canon Ep 3 + 14** | +| Deadpan acceptance | insult → agreement that disarms ("Thanks. Grew them myself." / "What do you want your headstone to say?") | Field Trial · UK Cold Open | +| The countdown hatch | public countdown → private plea to the thing that can't hear → it answers at two | Egg Boy | +| The all-in wager | accusation → named stakes on both sides → public witness → payoff | Field Trial (Dreaddeath bet) — *cross-show convergence with the RBM wager stack: this shape wins everywhere* | +| Shame-inversion rescue | "Three against one?" → the strong shamed by their own advantage → "Get out of here." | **canon Ep 16** (Luna) | +| The rigged rules | clean win → "questions about how you won" → rules rewritten mid-game → a worse opponent | Five Exams (Yang) | +| Rank-mockery volley | crowd single-liners that teach the world rule inside the joke ("Why is a Level One on Squad Three?"-shape) | all 5 scripts, canon Ep 1–2 | + +## VARIANT-CANON NOTES (declare one continuity per promo — mixing is a defect) + +- **Chief bully:** canon eps use **Jin** (spirit tiger) with unnamed scale-boy and eagle-girl; Five Exams promotes **Klein Goldcrest** (canon Ep 1 has him only as the ceremony mocker) to lead with **Kai** as enforcer. Both are proven — pick one pair and hold it. +- **Klein's beast:** Golden Lion in Five Exams; canon Ep 1 gives the Crimson Salamander to **Ron Blackfire**; SSS Dragons hands it to Klein. The Golden-Lion-Klein is promo-native. +- **Family:** canon = both parents alive, cooks, sixty, mature Iron plants, leaf-and-vine hair. UK Cold Open kills the father and adds landlord **Garrick** menacing the mother — a market variant; its lines are PROVEN for that continuity only. +- **The power:** canon's knowledge flood comes from completing the two-half medicine (father's male plant → his birth; the female plant found at ten). SSS/Egg Boy compress this to a single "half-flower" trip. Either compression is proven; the *knowledge-not-strength* result is invariant. +- **Register:** UK Cold Open runs UK-idiom ("mummy," "skint," "bruv") — do not import into non-UK builds. +- **Timeline:** canon ceremony is at age ten with school at ten; Five Exams runs an academy exam arc; Egg Boy moves the hatch to the academy gates. The hatch-moment is movable; the mockery that follows it is not. + +## FINDINGS (standing enforcement — seeded; W5 appends from first pipeline run) + +| ID | Note | Status | Enforcement | +|---|---|---|---| +| F-301 | No pipeline run exists yet — this table is seeded from cross-script reading, not W5 verdicts | OPEN | First W3/W4 run on WBT ships its checklist against this ledger; W5 appends real findings | +| F-302 | Continuity mixing risk (see VARIANT-CANON) | OPEN | The build declares its continuity (bully pair, family state, register) in the W2 header; checklist verifies no cross-variant line imported | +| F-303 | Ren's canon register is *quiet certainty* — he answers plainly, deflects, never monologues his knowledge ("I just looked where no one else does.") | OPEN | No block gives Ren system-speak or lecture-voice; his longest speeches are pleas to Cloud/the egg, not explanations | +| F-304 | The knowledge must be *punished before believed* (3/5 scripts, canon Ep 20) — skipping the cost turns the engine into a power fantasy with no injustice | OPEN | At least one act→punishment beat where being right costs him, verified by quote | diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/MVS_DraftSelection_ControlScript_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/MVS_DraftSelection_ControlScript_v1.md new file mode 100644 index 0000000..dcdf07e --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/MVS_DraftSelection_ControlScript_v1.md @@ -0,0 +1,508 @@ +# CONTROL SCRIPT — MVS "Draft Selection" (proven MVS promo · same-show control) + +*Permanent calibration control for the T6.10.2 CONTROL GATE, alongside the Ebony anchor. This is the shipped MVS/Quinn promo whose Weapons/Draft-Selection skeleton the "Midnight" angle inherits — the same-show reference. A restored/new pipeline rule that FIRES on this script is miscalibrated (production-law rows are control-exempt). Operator-supplied. Preserved verbatim.* + +--- + +CAST + +QUINN (NARRATOR): Calm version of Quinn with an intense, emotionally layered narrative style. Sardonic and self-deprecating in quieter moments — dry humor that drops away when the fear is real. When bullied, tight and humiliated, speaking through gritted teeth. When empowered, pure awe shifting to exhilaration. Carries a low-level tension throughout — this is someone constantly calculating what he can and can't show. +QUINN (DIALOGUE): Male, early 20s, capable of sharp wit under pressure and genuine vulnerability when caught off guard. In confrontations, his voice wavers between controlled calm and barely-contained defiance. When afraid, the fear is specific — not generic anxiety, but the sound of someone who knows exactly what happens if he's caught. +ERIN HELEY: Female, early 20s, clipped and commanding. Evaluates people like equipment — efficient, direct, zero warmth in her default mode. When she softens, it's sudden and brief — a crack in the armor that closes fast. Capable of lethal calm. Her anger is cold, not hot. +REX: Male, 20s, performative cruelty — plays to the crowd, feeds on laughter. Cocky, theatrical, the kind of bully who needs an audience. When challenged, the performance drops and something uglier surfaces. +LOOP: Male, 20s, gangly, nervous energy. Rex's shadow — follows orders, occasionally improvises badly. Voice is reedy and eager to please. +LEO: Male, late 50s, low and deliberate. Every word sounds like it costs him something. Eccentric — capable of dry humor and dead seriousness in the same sentence. When he speaks, rooms go quiet not because he's loud but because he's Leo. +Pocket FM Narrator: Male, 30s, is there a way we can get someone who sounds like a 'next time on Dragon Ball Z' kind of character? +THE SYSTEM: Robotic, echoey, perfectly calm. Speaks with absolute certainty. Cadence is steady and emotionless — an intelligence that doesn't care about context. +THE OFFICER: Male, 30s, bored bureaucratic delivery — until the board glitches and genuine confusion breaks through. +THE PROCTOR: Male, 40s, impatient technician. Doesn't care about students — cares about equipment. +ADDITIONAL STUDENTS: Late teens, reactive — capable of cruel laughter, shocked silence, and hostile murmuring depending on the moment. + +--- + +QUINN (NARRATOR): If anyone in this room found out what I was, I wouldn't make it out alive. + +[INT. ACADEMY AUDITORIUM — three hundred students seated, draft board glowing at the front — DAY] +[SFX: DRAFT BOARD CHIMES] + +THE OFFICER: "Quinn Talen. Squad Three." + +[SFX: LAUGHTER — SCATTERED, THEN SPREADING] + +STUDENT: "Is this a joke?" + +STUDENT 2: "Why is a Level One on Squad Three?" + +QUINN (NARRATOR): Three hundred heads turned to look at me. I froze. +I wasn't a Level One. I was a vampire. And every ability user in this room had been trained to kill things like me. + +[IMPACT: INSTITUTIONAL DEPTH — the board double-selects Quinn.] +[SFX: BOARD GLITCHES — NAMES SCRAMBLE — SHARP ELECTRONIC STUTTER — SILENCE DROPS] + +THE OFFICER: "Wait. Hold on — the board just... hold on." + +QUINN (NARRATOR): The auditorium went dead quiet as everyone watched the draft board scramble, names flicker, and 'Quinn Talen' reappear at the top. + +THE OFFICER: "Quinn Talen. Squad Three. Selection confidence... one hundred percent." + +QUINN (NARRATOR): It picked me… bugged out, and then picked me again. The system just exposed me. Everyone looked at me, more suspicious than ever. + +ERIN: "There must be a mistake. He's a Level One." + +QUINN (NARRATOR): That was Erin Heley. Squad Three's captain. Level Five. The strongest cadet in our year. I'd had a crush on her since the first week of school — not that it mattered. She didn't know I existed until the board put my name next to hers. +No cruelty in her voice. Just fact. But she'd said it loud enough for three hundred people to hear. +Great. First impression. + +REX: "Quint Taylor? Who's that?" + +QUINN (NARRATOR): Rex. Level Four. Flanked by his gangly lackey, Loop. He knew exactly who I was. He couldn't even be bothered to get my name right. + +[SFX: LAUGHTER] + +REX: "Every squad needs a weak link, I guess." + +QUINN (NARRATOR): The room laughed. My face went hot. I started walking. Head down. +Vampires were hated in this world. Hunted. Ability users had been killing them for a thousand years — and this academy was wall to wall with ability users. +If anyone found out what I was, I wasn't just expelled. I was dead. +I was nearly level with Rex when he stepped into my path. + +REX: "Well, I guess even the Academy makes mistakes. Good luck out there, mistake." + +QUINN (NARRATOR): I looked Rex dead in the eye. + +QUINN (DIALOGUE): "Better a mistake than the guy who peaks at Level Four." + +[SFX: SHARP INTAKE — AUDITORIUM REACTS] + +QUINN (NARRATOR): The laugh that moved through the room had a different edge. Not laughing with Rex anymore. Rex's grin vanished. His jaw tightened. He lunged for me. + +[IMPACT: STATUS INVERSION — predator movement. Killua-style frame skip.] + +I wasn't looking at him. I didn't need to. I felt him shift his weight before he'd even lifted his hand. +Then I was two feet to his left. +There was no dodge. No flinch. No transition. I was in one place and then I was in another and the middle just wasn't there. Like someone had cut a frame out of reality. +Rex's hands closed on air. He stumbled to one knee. + +[SFX: BEAT — THEN WHISPERING] + +STUDENT 3: "Did you see that?" + +STUDENT 4: "How did he... a Level One can't move like that." + +QUINN (NARRATOR): The whispering spread fast. Not laughter this time. Something else. Three hundred ability users had just felt something they couldn't name. +Rex muttered something to Loop, and I felt it — the air shifting. An invisible forcefield locking around my body. Loop's ability. Telekinesis. It froze me in place like I'd been set in concrete. +Inescapable for a Level One. I could shatter it with another step. But then everyone would see. +Don't move. Don't react. Let them think you're frozen. + +[SFX: FOOTSTEPS — REX APPROACHING] + +Rex stepped up in front of me. Took his time. He knew I couldn't move. The whole room knew. +He cleared his throat. I heard it coming. + +[SFX: SPIT] + +A glob of mucus hit the side of my head. + +[SFX: AUDITORIUM ERUPTS] + +REX: "Thought you were quick, Level One?" + +[IMPACT: STATUS INVERSION — environmental leak. The whisper that becomes the scream.] + +QUINN (NARRATOR): Students choked with laughter. Rex grinned and took a bow. +And I had to stand there, spit running down my face... because I couldn't show anyone who I really was. +It was so unfair. +My fists clenched... and the floor cracked. A single hairline fracture split the tile beneath my feet. +I gasped, terrified I'd revealed myself. But the room was too distracted by Rex's grandstanding to notice. + +REX: "Good luck out there, Talentless Talen." + +QUINN (NARRATOR): It would be so easy. One move and everyone would know what I was. And I would never have to take this again. +But I said nothing. + +[IMPACT: POWER-CEILING REVEAL — Erin's ice spike. Casual lethal precision from across the room.] +[SFX: SHARP CRACK] + +Then — a spike of ice buried itself between Rex's legs. Dead center. One inch from his manhood. +The laughter died. + +[SFX: DEAD SILENCE] + +Erin hadn't moved from her position at the front. Hadn't raised her voice. Hadn't even looked up. + +ERIN: "The Level One is on my squad. Leave him alone." + +QUINN (NARRATOR): She said it like she was reading a weather report. Then her eyes lifted to Rex — cold, bored, absolutely certain of what would happen if he didn't listen. + +REX: "Or what, Heley?" + +ERIN: "Next time I won't miss that tiny little pecker." + +[SFX: LAUGHTER — AIMED AT REX] + +QUINN (NARRATOR): The laughter in the room shifted — aimed at Rex now. His face went red. The performance dropped. He stepped toward Erin, close enough that only she could hear. But my hearing wasn't human. + +REX: "You're going to regret that, Erin. You and your little Level One. When I get the chance — and I will get the chance — you'll wish you'd kept your mouth shut." + +QUINN (NARRATOR): He wasn't playing to the crowd anymore. This was the kind of threat you make when you mean it. +Erin didn't flinch. Frost spread across her knuckles. + +ERIN: "I'll be right here." + +[SFX: ICE CRACKLING] + +LEO: "Enough." + +[SFX: DEAD SILENCE — INSTANT] + +QUINN (NARRATOR): One word. The entire auditorium went silent. +Rex froze mid-step. Erin's frost stopped spreading. Three hundred students didn't just stop talking — they stopped moving. +A man stepped out of the shadows at the side of the stage. +Master Leo. The Blind Swordsman. Every first-year had heard the stories. That he'd ended wars alone. That he could see things on a completely different plane than the rest of us. + +LEO: "Everyone seems... rather eager this year." + +QUINN (NARRATOR): He moved like the room belonged to him — not with aggression, but with the absolute certainty that nothing in it could touch him. +Everyone stayed frozen. And then — he smiled. And the air returned to the room. +He looked at the entire auditorium — and somehow, I felt like he was only looking at me. + +LEO: "You've been drafted. The Squad Qualifiers start now." + +[SFX: SHOCKED MURMUR] + +LEO: "Phase One — individual duels. No abilities." + +STUDENT 5: "No abilities? In a qualification trial?" + +LEO: "Abilities show you what a student has." + +QUINN (NARRATOR): He paused. And something shifted behind his eyes — like he was looking at the room but seeing something else entirely. + +LEO: "I want to see what a student is." + +LEO: "Phase Two will be full squad combat. Abilities live. Any squad that loses will be dissolved on the spot." + +QUINN (NARRATOR): Dissolved. That meant Erin's squad. My squad. + +LEO: "Ten students die a year at this academy." + +QUINN (NARRATOR): He said it like he was reading a weather report. + +LEO: "Today might add to that number. Shall we begin?" + +[INT. TRIAL ARENA — vast combat space, scanning gate at the entrance — DAY] +[SFX: SCANNER BEEPING — ROUTINE] + +QUINN (NARRATOR): At the entrance to the arena, a verification gate scanned each student on the way in. Standard security — the display flashed a number, confirmed your level, waved you through. +I stepped through. + +[IMPACT: SYSTEM/ARTIFACT DISCOVERY, T1 — the scanner climbs past Level 6 and crashes.] +[SFX: SCANNER ESCALATING — ELECTRONIC CLIMBING TONE] + +QUINN (NARRATOR): The display started climbing. Past Level Four. Past Level Five. Past Level Six. +My stomach dropped. No. Not here. Not now. + +[SFX: SCANNER CRASH — ELECTRONIC FAILURE] + +The display crashed. Reset to blank. I stood there, frozen, waiting for someone to point at me and scream. + +THE PROCTOR: "Hold on. Step back through." + +QUINN (NARRATOR): He pulled me aside. My heart was hammering so hard I was sure he could hear it. He reset the machine, checked the wiring, and gestured me back through the gate. +I stepped through again. The display flickered — and stayed blank. Nothing. + +THE PROCTOR: "Huh. Guess the scanner's having a bad day. Go on ahead. We'll get it looked at." + +QUINN (NARRATOR): He'd already moved on to the next student. Just a technician with a broken machine. +But from the observation deck above the arena — Leo was staring at a screen. Then at me. Then back at the screen. +My hands were shaking. And Leo was still watching. + +[SFX: ARENA AMBIENCE — OPEN SPACE, CROWD MURMUR] + +QUINN (NARRATOR): The trial arena opened up beyond the gate. It was massive — a flat combat floor ringed with tiered stands that were already filling with students. Squads clustered below, sizing each other up across the open ground. +I found Squad Three on the far side. Erin was already strategizing. +She looked at our lineup — beast weapon carriers, superpowered Originals — then looked at me. Standing there with no weapon, no ability, no reason to be on this squad. + +ERIN: "You're going first." + +QUINN (NARRATOR): She was putting me in the spotlight. Again. The one place I couldn't afford to be. + +ERIN: "Phase One is no abilities. My squad is full of powerhouses who just lost their powers. You've got nothing to lose — this is your only shot to be useful." + +QUINN (NARRATOR): Using me was smart for the squad. It also told me something clearly — I was expendable. +She must have seen something on my face, because she stepped closer. Dropped her voice so only I could hear. + +ERIN: "Level playing field. You can do this." + +QUINN (NARRATOR): She held my gaze. + +ERIN: "I know what you are." + +QUINN (NARRATOR): My blood went cold. Every muscle locked. She couldn't — there was no way — the scanner, the sidestep, something must have given me away and now the strongest student in the school was looking me dead in the eyes telling me she knew— + +ERIN: "A fighter." + +[SFX: BEAT] + +ERIN: "You don't make it at this academy without powers unless you've got guts." + +QUINN (NARRATOR): The air came back into my lungs. She didn't know. She thought surviving this place as a Level One meant I was tough. She was wrong about why. +But she wasn't wrong. +Then something in her voice shifted — from captain to something I hadn't heard before. + +ERIN: "And you're on my squad. I have your back. No matter what." + +QUINN (NARRATOR): It was the first time anyone at this academy had said those words to me and meant them. + +[SFX: SPEAKER CRACKLE] + +LEO [THROUGH ARENA SPEAKER]: "First duel. Squad Three — send your fighter." + +QUINN (NARRATOR): Erin nodded at me. I walked to the center of the arena — open ground, no cover, three hundred people in the stands watching. +Rex had been watching from across the floor. He'd seen Erin send me in. Now he was sending his answer. + +REX: "Loop. Show everyone what the Level One is really worth." + +QUINN (NARRATOR): Loop stepped out of Squad Seven's formation and walked toward me. A Level Three with six inches and thirty pounds on me — and the same guy who'd frozen me in place while Rex spit on my face in the auditorium. +We stood ten feet apart. The arena went quiet. +Loop cracked his neck. Rolled his shoulders. Played to the stands. + +LOOP: "Don't worry, Quint. I'll go easy on you." + +[SFX: LAUGHTER FROM THE STANDS] + +QUINN (NARRATOR): Mini-Rex. Same energy. Same need for an audience. + +[SFX: COMBAT BEGINS] + +He came at me fast — wide swings, showy footwork, the kind of fighting that looks impressive from the stands. +No abilities. No vampire reflexes. I fought straight — defensive, reading his rhythm, looking for openings. Level One versus Level Three, no tricks, no cheating. Just two people fighting. +And it was more even than anyone expected. +I slipped a hook. Found an angle. Landed a clean shot to his ribs. +Loop's eyes widened. The crowd murmured. + +LOOP: "Lucky shot, Level One." + +QUINN (NARRATOR): He came again, harder. Less showy. I caught another opening — tagged him twice, fast and clean. The laughter from the stands had stopped. Loop's face was red. +He wasn't winning fast enough. Rex was watching. +That's when I felt it. The air shifted. That same invisible pressure — Loop's telekinesis wrapping around my legs. Freezing me mid-step. +He was cheating. No abilities in Phase One, and Loop was using his. +Loop closed the distance. With me frozen, he didn't hold back — two hard shots to my stomach, one to my jaw. The crowd roared. From their angle, it looked like he'd just found his rhythm. +Nobody knew I couldn't move. + +LOOP: "There it is. Knew you'd run out of luck eventually." + +QUINN (NARRATOR): He released the hold and stepped back — arms wide, grinning at the crowd. Selling it. +I wiped blood from my lip. My legs were free again. +Last time he'd done this to me, I stood there and took it. I didn't understand what was happening. +Now I did. +Loop came again. I felt the air shift — the telekinesis reaching for my legs, the same construct, the same technique. But this time I was ready. I read it as it formed. There was a half-second window where his attention divided. +I'd learned this lesson with spit running down my face. + +[SFX: SINGLE CLEAN IMPACT — BODY HITTING FLOOR] + +A clean right hand to the jaw the instant his focus split. +Loop dropped. + +[SFX: SILENCE — TOTAL] +[IMPACT: INSTITUTIONAL DEPTH, T1 — Leo's hidden-test payoff. The no-abilities rule was a filter.] + +QUINN (NARRATOR): The arena went dead quiet. Three hundred people recalculating what they thought they knew about the Level One on Squad Three. +I looked up at the observation deck. Leo leaned forward, both hands on the railing. +Our eyes met. +And the look on his face wasn't suspicion. It was satisfaction. +"Abilities show you what a student has. I want to see what a student is." +The no-abilities rule wasn't a limitation. It was a test. And whatever Leo had designed Phase One to find — I'd just shown it to him. + +[SFX: BEAT — THEN A VOICE CUTS THROUGH THE SILENCE] + +REX: "He cheated!" + +QUINN (NARRATOR): Rex was on his feet, pointing at me. + +REX: "He used a hidden ability! No Level One moves like that!" + +STUDENT 5: "He's right — that's impossible." + +QUINN (NARRATOR): The murmuring spread fast. Students turning to each other, nodding, buying it. + +STUDENT 6: "I saw it too. No way that was clean." + +REX: "Check him! Make him scan again!" + +QUINN (NARRATOR): Loop had used his telekinesis mid-duel. Loop had broken the rules. But nobody saw Loop cheat. Everyone saw me win. +And now the guy whose lackey cheated was the one demanding justice. +I wanted to scream it. But I couldn't say a word. Any defense I had would only raise more questions — questions I couldn't answer without exposing everything. + +[SFX: SPEAKER CRACKLE] + +LEO [THROUGH ARENA SPEAKER]: "Phase Two begins in sixty seconds. All squads to the arena floor." + +[INT. TRIAL ARENA — STAGING CORRIDOR — squads moving toward the arena floor, sixty-second countdown — DAY] +[SFX: FOOTSTEPS — MANY, MOVING — COUNTDOWN TONE IN BACKGROUND] + +QUINN (NARRATOR): Sixty seconds to Phase Two. Squads were pouring out of the stands and onto the arena floor. Erin should have been positioning her squad, giving orders, strategizing. +Instead she grabbed my arm and pulled me into the staging corridor. + +ERIN: "You lied to me." + +QUINN (DIALOGUE): "I didn't—" + +ERIN: "A Level One cannot read psychic constructs. A Level One cannot move the way you moved in that auditorium." + +QUINN (NARRATOR): She had me pinned against the wall. Students streamed past us toward the arena. We were wasting time she didn't have. + +ERIN: "What are you hiding?" + +QUINN (NARRATOR): She was right. And she was angry — not because I'd embarrassed her. Because I was putting her squad at risk. Her squad, her captaincy, her reputation. Everything she'd built. +Every answer I could give was either a lie or a death sentence. + +QUINN (DIALOGUE): "I just... got lucky. Loop dropped his guard and I—" + +ERIN: "Don't." + +QUINN (NARRATOR): One word. Cold enough to frost the air between us. + +ERIN: "Don't insult me. I watched you read his ability before he used it. I watched you time a counter to the exact moment his focus split. That is not luck. That is not a Level One." + +QUINN (NARRATOR): She was studying me. Really looking — like she was running calculations behind those blue eyes. Then something shifted in her expression. + +ERIN: "You're an Original." + +QUINN (NARRATOR): She said it like she was confirming something she'd already decided. Born with powers. Not book-learned. Born. +She was close. Dangerously close. +And completely wrong. +I was a vampire. The thing Originals had spent centuries hunting. But Erin didn't know that. What she knew was that someone like her — someone born different, someone hiding — was standing in front of her. +Her hand moved to a scar on her collarbone. The gesture was unconscious — I don't think she knew she was doing it. + +ERIN: "You can't tell anyone." + +QUINN (NARRATOR): Her voice had changed. The captain was gone. This was someone else — someone younger, someone who'd been hurt. + +ERIN: "Some people despise Originals. And the last person who found out about me..." + +QUINN (NARRATOR): She didn't finish. The scar under her fingers said everything the sentence couldn't. + +[SFX: COUNTDOWN TONE — LOUDER] + +QUINN (NARRATOR): Thirty seconds. Students were shouting for their squads. The arena was filling. And Erin was standing here, spending the time she should have been using to prepare — spending it on me. + +[IMPACT: POSITIVE IM — Erin's commitment. Warmth inside darkness. She's choosing Quinn over her own squad's preparation.] + +QUINN (NARRATOR): She straightened. Locked her jaw. And when she looked at me again, the captain was back — but something underneath it had changed. + +ERIN: "But I'm on your side. We're a team now. And I will help you through all of this." + +QUINN (NARRATOR): She meant it. The same voice that had thrown an ice spike between a bully's legs. The same voice that had told me I was a fighter. She was choosing me. Fully. +The bond was real. The foundation was a lie. +And if Erin ever found out what I really was — this moment, her hand on her scar and her eyes on mine — would be the thing that made it devastating. + +ERIN: "Now move. We're out of time." + +QUINN (NARRATOR): She said it like a warning. But I heard what she wasn't saying. +Rex had just promised to make her pay. And now they were walking into a combat round where he could. + +[INT. TRIAL ARENA — FULL COMBAT CONFIGURATION — DAY] + +LEO [THROUGH ARENA SPEAKER]: "Phase Two. Abilities are live." + +[SFX: MASSIVE MECHANICAL SHIFTING — ARENA TRANSFORMING] +[IMPACT: INSTITUTIONAL DEPTH, T1 — the arena reveals its true form.] + +QUINN (NARRATOR): The arena tore itself apart. +The floor split down the center. Walls rose from below — ten, fifteen, twenty feet high. Elevated platforms ground into position. Barriers snapped up between combat zones, thick and reinforced, the kind built to contain Level Five power without cracking. +The flat, fair dueling space from Phase One had been a lid. The real arena was underneath — three-dimensional, multi-level, built for warfare at a completely different scale than anything I'd seen at this Academy. + +LEO [THROUGH ARENA SPEAKER]: "Squad Seven versus Squad Three. Begin." + +[SFX: COMBAT — ENERGY BURSTS, IMPACTS] + +QUINN (NARRATOR): Rex moved fast. His Squad Seven broke formation like they'd rehearsed this — two members cutting left toward Erin, the rest driving Squad Three to the far side of the arena. +They weren't trying to win the round. +They were trying to isolate her. + +REX: "Loop! Now!" + +QUINN (NARRATOR): I felt it before I saw it. Loop's telekinesis — not aimed at me this time. Aimed at Erin. The same invisible forcefield that had frozen me in the auditorium wrapped around her from across the arena. +She froze mid-stride. Her ice started forming on her fingertips — and stopped. + +[SFX: HEAVY IMPACTS — STRIKES LANDING] + +QUINN (NARRATOR): With Erin locked in the hold, Rex's squad closed in. They didn't pull their strikes. Every blow aimed at joints, at her head, at the spots that break bones. +These weren't scoring hits. + +STUDENT 7: "What are they doing? That's going to kill her!" + +QUINN (NARRATOR): They were trying to kill her. And I knew exactly why. The ice spike between his legs. The tiny pecker. The laughter aimed at him instead of me. Rex had been keeping score since the auditorium — and now he was settling the debt in a place where Erin couldn't fight back. + +LEO: "That cadet is going to kill her." + +QUINN (NARRATOR): Leo moved from the observation deck — but the deck was fifty meters above, and the stairs were on the far side. +He wasn't going to make it. +I was across the arena. Erin was frozen in the same hold that had humiliated me — the same technique, the same invisible prison. Except I'd been humiliated in it. +She was going to die in it. +Rex standing behind his formation. Arms crossed. Watching. +And I could hear her voice. +I know what you are. A fighter. +I have your back. No matter what. +The person who said those words — the first person in my entire life at this academy to mean them — was going to die. +I moved. + +[SFX: FOOTSTEPS — FAST, ACCELERATING] +[IMPACT: STATUS INVERSION, T1 — Quinn charges through the unbreakable barrier.] + +Thirty meters of open ground. I hit the arena's safety barrier — the barriers I'd watched rise minutes ago, built to contain ability-level combat, engineered by the Academy to hold. + +[SFX: BARRIER SHATTERING — MASSIVE] + +I went through it. It didn't crack. It shattered. + +[SFX: GASPS — CROWD REACTS] + +STUDENT 8: "That's not possible." + +STUDENT 9: "A Level One just broke through a combat barrier." + +QUINN (NARRATOR): And I didn't care. I didn't care who saw. I didn't care what it meant. +Every hit I'd pulled in the auditorium. Every insult I swallowed. Every time I stood still while they spit on me and called me nothing. +It was over. + +[SFX: RAPID COMBAT — DEVASTATING IMPACTS] + +The first member of Rex's squad went down before he could raise a hand. The second lasted half a second longer. I broke Loop's concentration with a strike that sent him skidding across the arena floor, and Erin dropped free from the hold — gasping, catching herself on one knee. +What was left of Rex's squad scattered. +I stood between Erin and all of them. Fists shaking. Not from exhaustion. +Then something fired inside me. + +[SFX: SYSTEM ACTIVATION — LOW RESONANT PULSE] + +QUINN (NARRATOR): My System. It hadn't asked permission. An evolution. A threshold I didn't know existed — my vampire nature pushed to its ceiling under maximum restraint, and it crossed a line my body hadn't warned me about. +It flooded through me. +And I let it come. + +[SFX: SUSTAINED LOW FREQUENCY — BUILDING] + +My vision shifted. The arena didn't look the same. I could see attack trajectories before they formed — invisible lines connecting every body to every movement they could make. I was reading muscle tension from thirty meters away. Processing combat in a way that had nothing to do with training or talent or anything human. +Something was happening to me. Something that could not be hidden. + +[IMPACT: POWER-CEILING REVEAL — environmental reaction. The arena responds to what Quinn is becoming.] + +Around me, the arena responded. The air bent — color bleeding out of it like the world was flinching. The ground cracked deep beneath my feet. Not a hairline fracture hidden under my stillness. The earth splitting open because what was inside me was done being hidden. +The floor of the arena — the one the Academy built for warfare — was breaking apart under the weight of what I was becoming. +Every spit on the face. Every psychic hold. Every accusation. Every swallowed response. Every time I could have ended it and didn't. +This was the answer. This was me — all of me. +And the world was not ready. + +[SFX: SILENCE — THEN LOW WIND] + +QUINN (NARRATOR): From the observation deck, Leo had stopped moving. Both hands on the railing. +His expression wasn't surprise. It wasn't anger. +It was recognition. Old and certain. + +LEO: "I've seen movements like that before." + +QUINN (NARRATOR): Power coursed through me — every cell in my body rewriting itself, my vampire nature fully awake for the first time. The arena floor splintered outward from where I stood. The air around me hummed. + +LEO: "It can't be." + +POCKET FM NARRATOR: Quinn just shattered the Academy's strongest barrier — and every student saw it! What will happen when the whole school is hunting his secret? What did Leo see before — and who else moved the way Quinn moves? How will Erin react when she finds out her teammate isn't an Original — he's a vampire!? You won't believe what happens next! Download Pocket FM now and continue the story for free! diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/PE_KissTheHand_W3_ReverseEngineered_v6.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/PE_KissTheHand_W3_ReverseEngineered_v6.md new file mode 100644 index 0000000..94c1069 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/PE_KissTheHand_W3_ReverseEngineered_v6.md @@ -0,0 +1,141 @@ +# PRINCESS EBONY — "KISS THE HAND / CAST OUT" — W3 v6 · microbeat grain at performance density + +*v6 rule: every microbeat is written at the density where W4's job is staging, not authorship — minor and crowd voices carry their actual lines, punch phrasings appear verbatim (never paraphrased), each block holds one concrete staging anchor. Tentpoles run fat, connectives lean. No count ceiling — this asset decomposes to 49 microbeats (~5,300-word script; a standard 4,500-word promo lands ~35 at this grain). No production formatting: what W4 adds is tags, sluglines, SFX, pacing, and the performed middles of exchanges. NEW in v6 — narration is recut toward the natural spoken flow of `W3_Style_Exemplars_v1.md`: sentences swing 2–28 words; staccato is saved for a single punch — isolate ONE punch and let the rest flow (a run of stacked short sentences stilts even at three); motion rides 12–22-word sentences; one plain verdict allowed at the punch. v3's flowing sentences are kept; the over-long/clunky runs and stacked-shorts patches were swept, and the over-long MB46 was split into two blocks. Dialogue is untouched.* + +**CAST** — EBONY: a princess trained to manage men politely, running out of politeness. NOVA: the thousand-year dragon inside her — part weapon, part conscience; begs to be let out and lectures her about cruelty in the same hour. KING LIAM: a father who cares what things look like, not what they are; hard in public, and twice — almost invisibly — not. EDWIN: fourteen, their father's worst beliefs in a smaller body. BERIOD: an old king who likes that she can't refuse him. GREYSON: the one man in the room not appraising her. RADION: the ancient dragon inside Greyson — Nova's mate; patient, absolute. GERALT: the captain who never stopped serving her. THE COURT / THE CROWD: Allarion itself — it blames the woman. + +--- + +### 1 · THE BURNING — castle courtyard, ten years ago + +**MB1** — They chained a woman in irons in the middle of the castle courtyard, and the crowd screamed for the fire — **"Burn her! Dragon witch!"** The woman had made one mistake. Having a dragon — a privilege this kingdom reserved for men. Fourteen-year-old Ebony watched it from beside her father, the King. + +**MB2** — **"Let this be a lesson to every woman in Allarion."** Ebony pulled at his sleeve — **"Father, please, let her go!"** — **"Ebony, it is the law of this Kingdom."** She tried to look away. He made her watch as they burned the woman alive. And when the fire was done, he bent to his daughter: **"Never forget, even as a Princess… you obey men."** + +### 2 · GOOD BONES — the throne room + +**MB3** — Ebony was made to meet King Beriod — a potential bride; he was old enough to be her grandfather. He studied her face and tilted her chin with one finger. **"She'll do. Good bones. She'll fill out."** His hand moved toward her hip. + +**MB4** — Ebony slapped it away. **"Don't touch me! I don't belong to you!"** The throne room went dead quiet. + +**MB5** — Her father grabbed her arm hard enough to bruise. **"Apologize."** — **"He was going to grab me."** — **"Apologize. Now."** She shook her head. **"Now, girl!"** For refusing, she was locked in a pantry for a week. In this Kingdom, girls didn't fight back. They disappeared. + +### 3 · THE SCROLL — the study door, then the old archive, night + +**MB6** — Then one evening, her father's voice came through the study door: **"I would rather see a beggar sit on my throne than any woman. Even my own daughter."** But Ebony had heard a different story — whispers from her mother, a prophecy that she would one day be Queen. That night she went looking for proof. + +**MB7** — She tore through the scrolls and tomes of the old archive. Nothing. Then, behind a rotting tapestry, the wall began to rotate — a hidden room, scrolls everywhere, and one glowing on a pedestal. The parchment was warm in her hands: *The Princess of Allarion who inherits a dragon will become Queen of two realms.* + +**MB8** — The scroll came alive. Light poured from the letters, and something inside Ebony's chest answered it — heat flooding through her, building, swelling, too much to hold. The scroll fell from her hands. Black scales tore through her arms as her eyes went black, and then she saw her — a dragon, ancient and enormous. **"I choose you."** The voice shook the chamber; dust fell from the ceiling. **"I am Nova. I have waited centuries for you, Ebony. And every word on that scroll is true."** + +**MB9** — A dragon older than every bloodline in the kingdom had chosen her — in a country where a woman hiding a dragon was burned alive. Her own father had signed that law. **"And if my father finds out… he'll be the one who kills me."** + +### 4 · THE ULTIMATUM — the castle library, years later, dawn + +**MB10** — Years later. The door slammed. **"You will choose a husband tonight. Refuse — and I will drag you to the castle gates and marry you to the first man who walks through them."** + +**MB11** — Heat ripped up Ebony's spine; inside her, Nova clawed to the surface. **"Say the word, Ebony. And I will burn him where he stands."** Four years she had kept Nova secret, and sometimes the secret threatened to explode on its own. **"Your eyes, Ebony. They're shifting."** Silver bleeding to black — the one thing she could never control. + +**MB12** — Tonight, every prince in the realm would arrive with a dragon of his own. If even one of them sensed Nova, Ebony would be dead before morning. **"Well?"** She forced the heat down. Swallowed the fire. And chose the most dangerous room in Allarion. **"I'll go to the ball, Father."** + +**MB13** — Alone, she pressed her palms against the cold library table and waited for the heat to pass. Nova paced inside her mind like a caged beast. **"One day, Ebony. One day you will stop bowing to that man."** — **"One day. Not today."** + +### 5 · LIVESTOCK — the corridor, morning + +**MB14** — She hadn't made it ten paces before the voice she hated most found her. **"How does it feel? Being auctioned off like livestock?"** Edwin leaned against a pillar, arms crossed, grinning — fourteen years old, already a mirror of their father's worst beliefs. **"Princes from every corner of the realm. All here to bid on you. How thrilling."** — **"You sound eager to see me gone."** — **"Everyone is eager. Once you're married off, Allarion can finally stop pretending you matter."** + +**MB15** — She cut him back: **"And once I'm gone, you'll be the most disappointing person in this castle all by yourself. At least now you have competition."** His grin faltered. And Nova stirred: **"Cruelty makes you no different from them, Ebony."** Ebony ignored the lecture — not because Nova was wrong, but because kindness in this castle was a luxury that got you killed. + +**MB16** — Edwin recovered, leaned close, dropped his voice. **"Oh — I almost forgot. Father's invited King Beriod to sit at the head table tonight. Right beside you. I hear he's been asking about you. Specifically."** He walked off whistling, and the name kept ringing in her skull — the man who had tried to buy her at fourteen, waiting for her at the ball. **"I do not like this, Ebony."** — **"Neither do I."** + +### 6 · ARMOR — the castle ballroom, evening + +**MB17** — She wore the red dress her mother had made her. On the night her father was selling her off, her mother made her look like a queen — black diamond tiara and all. Tonight, it felt like armor. + +**MB18** — Ebony stepped into the ballroom — and felt them. Dragons. Dozens of them, inside dozens of princes, their awareness pressing against her like wolves circling prey. Nova shrank inside her. **"Too many. If even one senses me—"** — **"I know."** + +**MB19** — Her father was waiting at the top of the stairs. He gripped her arm before she'd taken two steps. **"Stand up straight, Ebony. Your suitors are watching."** Not *are you alright*. Not *you look beautiful*. Her suitors — as if she were a horse being trotted past buyers. She straightened. She descended. + +**MB20** — Halfway down, Edwin materialized beside her. **"Is that mother's dress? How sweet. She must have wanted you to feel special before they carted you off."** A knot of princes at the foot of the stairs glanced up, laughing: **"That's the one? She's the reason we traveled three kingdoms?"** Edwin grinned — **"All that effort, and still they're unimpressed."** — and Nova held her steady: **"Breathe. If your eyes shift here, we are dead."** + +**MB21** — At the bottom step, Captain Geralt moved to her side. His hand rose — steady, careful — and adjusted the black diamond tiara where it had shifted. **"You look wonderful, Princess. Tonight is your night."** + +**MB22** — She stepped deeper into the ballroom — and froze. A dark-haired prince she didn't recognize. The only man in the room who wasn't laughing, appraising, or looking away. The rest of the room disappeared. And Nova went silent. + +**MB23** — Across the ballroom, something stirred inside Prince Greyson of Piroria. **"Those eyes."** — **"What about them?"** — **"I would recognize them anywhere. She carries Nova. My mate. Bonded to me centuries before either of you were born. And because our dragons are true mates, Greyson — so are you. Princess Ebony is your mate."** Their eyes locked across the room; she looked away first, flushed, and disappeared into the crowd. **"Do not approach. Her dragon is hiding. If we move too soon, we expose her… We are not leaving this kingdom without her."** + +### 7 · THE DANCE + +**MB24** — A courtier clinked his glass — **"Let the dances begin!"** — and to her disgust, the hand that claimed her was Beriod's. She had no choice but to take it. They danced. His hand settled on the small of her back. Then it slid lower. She kept her voice measured — the voice of a princess trained to navigate men like this without causing a scene. **"Your hand, sir… would you mind?"** Beriod smiled, and pressed it firmer. **"I like how uncomfortable you're getting. It's cute."** + +**MB25** — Nova erupted — heat ripping up her spine, black creeping into her vision, scales forming beneath the skin of her forearms. **"Let me OUT. I will melt the flesh from his bones—"** Ebony's voice came out louder than she intended, sharp enough to cut through the music: **"I said — let me GO!"** + +**MB26** — The song ended. The room turned. And every eye landed on Ebony — not on the man whose hands had been crawling over her. Nobles whispered behind fans; women shook their heads. Beriod straightened his coat and walked off with a disgusted look, and the court nodded him past. Nobody looked at Ebony with sympathy. She was the problem. + +**MB27** — Something inside her cracked. Done hiding. Done being touched by men the system protected and then blamed for objecting. Her hands were heating, scales rippling under her skin — seconds from shifting in front of every prince in the realm. Then a hand caught her wrist — firm, not rough. Greyson pulled her toward him as the next song began, and before she could speak: **"I'm sorry that happened."** Four words no man in Allarion had ever said to her. + +**MB28** — The dance carried them forward, his hand at her waist — correct, respectful, nothing like Beriod's grip. And she couldn't stop the questions. **"Is it true? That Pirorian women train for combat?"** — **"It's true. Women serve in the military. Hold government positions. Train alongside men."** — **"As equals?"** — **"As equals."** The word hung between them. A concept that didn't exist in Allarion. Something cracked open inside her — not Nova, not fire. Something older. Hope. + +**MB29** — She went further than was safe. **"I believe women should rule."** The music wavered; his eyes widened. **"There's a prophecy. Spoken at my birth. It says I will be queen. That I'll rule two nations as one. And I intend to make it happen."** — **"You're telling me this? Here? Now? Please — keep your voice down—"** And she laughed. Not bitterly. Worse — with the exhaustion of someone who had already lost. **"What are they going to do? Sell me to the highest bidder? They're already doing that. Marry me off to a stranger? That's tonight's plan. The only thing left they can take from me is my life — and most days, I'm not sure that's even mine to keep."** + +**MB30** — The music stopped. Ebony stood in the center of the ballroom with tears running down her face — not sobbing, not dramatic. Just sad, crying quietly in front of everyone. The court stared. Greyson gripped her hand tighter. **"Ebony… your father."** + +### 8 · KISS MY HAND + +**MB31** — King Liam crossed the floor and took her by the arm, his grip iron, his voice low enough that only she could hear. **"You're crying. In front of every royal family in the realm. Where is your decorum?"** Not *what did you say*. Not *what did you tell the Pirorian*. He hadn't heard a word. He didn't care what she felt — he cared what it looked like. He steered her toward the throne dais, Edwin watching from the corner with a cup in his hand, Geralt tensing at his post — and extended his hand. Palm up. The command was ancient. Public. Absolute. **"Kiss my hand. Then go back to the Pirorian. Smile. Dance. And obey — the way a princess should."** + +**MB32** — Ebony stared at the hand. She thought of Beriod's grip on her waist. Edwin's smirk. The hundred men who had watched her be groped and said nothing. She thought of Greyson — the one person who had said he was sorry. And Nova, for the first time in four years, was not surging. Not begging. Waiting. **"Whatever you decide, Ebony. I am with you."** Thirty years of rule. Nobody had ever left that hand unanswered. Ebony stepped away from her father. The room went dead silent. The hand stayed extended. Unanswered. The King of Allarion stood before every royal family in the realm — and his daughter walked away from him. + +### 9 · THE SCREAM + +**MB33** — Then Nova erupted — and Ebony didn't fight her. She fed her. Four years of hiding. Four years of swallowing fire so this kingdom wouldn't kill her for what she was. Four years of bowing while being the most powerful being in the room. It all tore loose. The scream hit every dragon in the ballroom at a frequency that dropped men to their knees. Princes collapsed, goblets shattered, and the chandeliers swung. **"There you are, Princess Ebony."** + +**MB34** — She moved through the stunned ballroom — and the room parted. Not because she pushed. Because the dragons inside every prince were screaming at their humans to get away from her. Prince Tye, who had mocked her for years, was on his knees first. **"Stand up."** He couldn't. + +**MB35** — She stopped in front of King Beriod. This time, he didn't smile. **"I will never be yours. You disgusting old man."** She didn't touch him. She didn't need to. His glass shattered in his hand. + +**MB36** — Then the guards came — the only men in the room still standing, blades drawn. And Geralt stepped between them and her. **"Put your weapons down, she is a Princess of this Kingdom!"** + +**MB37** — In the middle of the wreckage, Greyson stood perfectly still. Something shimmered around him — faint, crystalline, like ice catching light, visible only to her. Two words, quiet enough that only she could hear: **"Pick me."** The words she wanted to scream — *I will not have you* — caught in her throat. Her mouth opened. Nothing came out. The mate bond physically would not let her reject him. **"Ebony… please."** She ran — past the shattered goblets, the bleeding princes, the stunned court. Behind her, Greyson didn't follow. **"She'll understand. Eventually."** — **"And if she doesn't?"** — **"Then I'll make sure she survives long enough to learn."** + +### 10 · THE AUCTION + +**MB38** — King Liam stood before what remained of his court. His daughter had committed treason against every visiting kingdom — alliances shattered, reparations demanded — and he would fix it the only way the law allowed. **"My daughter is no longer under my protection. Any man who will take responsibility for her may claim her as his wife. One hundred thousand silver."** Silence. **"Fifty thousand gold."** Stone silence — Ebony at the edge of the room, guards gripping her arms, watching her father sell her. A prince near the front raised his hand — then sat down as if shoved by something no one could see, his mouth opening on nothing. Because Radion was already inside him. Inside all of them. **"None of you will claim her. Not one."** — **"Seventy thousand gold!"** Nothing. + +**MB39** — **"Very well. Bring her before the Council."** — **"Father, please!"** The guards seized her arms; she dug her heels into the stone; they shoved her forward. She hit the ground hard, and her dress tore at the knee. **"For once, just do as you're told, girl!"** Girl. Not Ebony. Not daughter. Not princess. Girl. + +### 11 · THE VOTE — the council chamber, night + +**MB40** — **"Nova… they're going to kill me. We have to do something."** — **"I need your help, child. I can reach into a dragon's mind… but only one. Listen to me. You are a princess. You are MY princess. You know these men — choose the weakest, and focus everything you have on him."** + +**MB41** — Five councilmen voted, one by one. **"Death."** Ebony flinched — **"Do not get distracted."** — **"Death."** — **"Push, Ebony. Focus only on the one."** — **"Death."** — **"I can do this."** — **"Death."** She remembered Beriod's hand on her waist, Edwin's cocky smile, the greedy faces of the princes. She would not allow a man to decide her death. Not today. Not ever. **"Death."** Five votes. One left. + +**MB42** — Lord Lyndon, the sixth councilman, stood — and Ebony pushed everything she had at one man. His mouth worked. His jaw trembled. His eyes bulged, as though something invisible had him by the throat. Because something did. **"Duh… duh… ba… ba-banishment."** The word fell into the room like a stone into water. Ebony collapsed to her knees. And King Liam let a breath escape — shoulders dropping, eyes closing for half a second. Relief. He didn't want his daughter dead. He just couldn't save her inside a system he'd built. He hid it immediately, straightening and hardening. **"The sentence is banishment. Effective immediately."** + +### 12 · STONES — the castle streets, night + +**MB43** — Geralt walked beside her. Title stripped. Dress stained. Tiara gone, and her name gone with it. The mob pressed in from both sides, pelting her with rotten tomatoes and stones. The words she'd heard whispered behind doors her whole life were screamed in the open now: **"Cursed!" "Witch!" "Monster!"** Then a woman pushed through the crowd — not throwing food, shaking with rage, the bruises around her eye fresh and purple and swollen shut. **"My husband beat me because of YOU! Because of what you did at the ball! He said if a princess can't behave, his wife sure as hell better!"** A stone caught Ebony in the shoulder. The realization hit harder: her rampage hadn't hurt the princes — they'd gone home with bruised egos; it was the women who paid. The system didn't punish the powerful — it punished the powerless. + +**MB44** — Another stone. Her knee buckled; she went down, palms on cold cobblestone, the mob closing in above her. A hand reached down. Geralt. He pulled her to her feet and stepped in front of her — not with his weapon drawn, but with his armored back. Then he leaned close, close enough that only she could hear. **"You will always be Princess of Allarion to me."** He pressed his fist to his chest: the Knight's Guard salute, reserved for royalty. She didn't have a title anymore. He gave her one anyway. Her throat closed; she nodded once, and kept walking. + +### 13 · BORIS — the castle gates, night + +**MB45** — The gates stood open. She heard him before she saw him — a shape emerging from the dark road, hunched, limping into the torchlight. Matted hair in greasy clumps. Teeth blackened and broken. A smell that made her eyes water from ten feet. A guard stepped forward — **"State your name and business."** — and the man's eyes, dark and calm, found Ebony through the torchlight. **"Boris. I heard there was a woman in need of a husband."** Just Boris. No family name. No title. No land. **"No."** — **"Ebony…"** — **"Look at him, Nova. Look at him."** — **"I see him. And you don't have a choice."** She turned to her father — **"Father, I promise… I will do whatever it takes."** — and his jaw tightened. **"It is too late, Ebony… it is done."** He took her hand, his grip firm and his fingers trembling, and walked her to the officiant. + +**MB46** — The officiant unrolled a scroll and did not look at her. **"Under the law of Allarion, this woman is bound to this man in the sight of the King and the realm. She will bear his name. She will bear his children. She will not speak in council. She will not hold property. She will not leave his home without permission."** Not even an ancient dragon could burn laws from the scroll. Ebony's hands shook; she pressed them together to stop it. **"Do you submit to these bindings for the rest of your natural life?"** + +**MB47** — The courtyard was quiet — no jeering now. She thought of the bruised woman, the stone, what defiance cost the women of this kingdom. Her father was looking away; his hand rose, quick, almost invisible, and wiped a tear from his eye. **"I will do as best I can."** Not *I do*. Not submission. Not surrender. But close enough for the law to accept. **"It is done. Close the gates when they leave."** Boris turned for the road — **"We need to move. It isn't safe to stay near these walls."** — and Ebony walked out of her city without looking back. The gates groaned shut behind them. + +### 14 · THE TRAIL — mountain road, night + +**MB48** — They walked in silence, Boris ahead, the castle shrinking to a smudge of torchlight against the dark. Then, slowly, she noticed it. The hunch was gone — not all at once, but as if each step away from the kingdom peeled something off of him. His shoulders rolled back. The shuffling limp smoothed into a steady, even stride. The body beneath the rags wasn't starved — it was muscular, built by training. And his eyes moved constantly, scanning the tree line, reading the terrain like a soldier cataloguing threats. + +**MB49** — Ebony opened her mouth — *who are you?* — and the words died in her throat, because she felt something that stopped her cold. A presence, from inside him — something ancient, something powerful. A dragon. **"That's not possible. He's a beggar. Beggars don't have dragons."** — **"Nova — I think he has a—"** — **"His dragon… Ebony! I know his dragon."** + +*(CTA ground: who is Boris · why does a vagrant move like a soldier · why does a beggar carry a dragon · and why does Nova — a thousand years old — recognize the dragon inside him.)* + +--- + +## THE DENSITY RULE, LOCKED + +Each microbeat carries its full performance surface: **every voiced line verbatim — crowd and minor voices included · punch phrasings written out, never paraphrased ("The woman had made one mistake. Having a dragon.") · one concrete staging anchor per block.** Tentpoles fat (MB31–32, MB37, MB42 run 90–130 words; three mega-tentpoles — MB38, MB43, MB45 — run 130–155 where the moment earns it), connectives lean (MB17, MB21 run ~40). Count uncapped: this asset = 49 blocks; expansion left to W4 ≈ 1.4–1.7× — tags, SFX, sluglines, pacing, and the performed middles of exchanges. W4 stages; it does not author. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/W3_Style_Exemplars_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/W3_Style_Exemplars_v1.md new file mode 100644 index 0000000..871c43e --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/W3_Style_Exemplars_v1.md @@ -0,0 +1,41 @@ +# W3 STYLE EXEMPLARS · v1 — five ideal microbeats, mined from proven scripts + +*This file replaces cadence rules as the driver of W3 narration. Each sample below is a winner's own moment folded into microbeat form — 3P past, lines verbatim and bold, apparatus stripped — with the winner's sentences kept as close to verbatim as the form allows. The microbeat imitates THESE. The lint rules (no 40-word sentences, no "the way you'd…" narration scaffolds, no five short sentences in a row) survive only as tripwires, not as targets.* + +*Why this exists: v2 narration failed purple (word budgets read as quotas), v4 failed staccato (a sentence cap read as a metronome). Both were rules driving prose. The proven register is rhythm — measured across these five samples: sentences swing 2–28 words; the staccato is SAVED for a single punch — **isolate ONE punch and let the rest flow**; a run of stacked short sentences stilts even at three, so keep one punch and connect the surrounding beats into motion (12–22-word sentences); motion rides 12–22-word sentences; rarely more than two narration sentences sit between voiced lines in a confrontation; and one short, plain verdict-sentence is allowed at the punch ("She was the problem.") — never a clause riding on an action.* + +--- + +## SAMPLE 1 — THE SILENCE-PEAK · from Princess Ebony (operator-written) +*What it teaches: the public command answered with silence; narration that counts the cost in memories, then steps aside; the punch carried by three fragments and one long final sentence.* + +**MB** — Every eye was on them as King Liam extended his hand. Palm up. The command was ancient. Public. Absolute. **"Kiss my hand. Then go back to the Pirorian. Smile. Dance. And obey — the way a princess should."** Ebony stared at the hand. She thought of Beriod's grip on her waist, of Edwin's smirk, of the hundred men who had watched a man grope her and said nothing. And she stepped away from her father. The room went silent. The hand stayed extended. Unanswered. The King of Allarion stood before every royal family in the realm — and his daughter walked away from him. + +## SAMPLE 2 — THE RECOGNITION DROP · from the CSR showroom (operator-selected anchor) +*What it teaches: the turn staged in three beats — the laughter, the world shifting, the deference — with the hero speaking last and least.* + +**MB** — The laughter spread through the showroom again — smug, poisonous, loud. Lucas didn't rise to it. He stood calm and silent, eyes on the Lamborghini, and sent a single text. Then the world shifted. Engines rumbled outside, deep, synchronized, powerful. A convoy of black SUVs rolled up in perfect formation. The laughter died instantly. A man in a fitted black T-shirt walked past the manager without a glance and straight up to Lucas — and when Lucas spoke, mildly annoyed, every jaw in the room hit the floor. **"I told you to keep your distance, Jordan."** **"My apologies, sir. What happened, sir?"** + +## SAMPLE 3 — THE CONCEALMENT TAX · from Draft Selection (shipped) +*What it teaches: humiliation absorbed on purpose; the secret leaking through one physical detail; the winner's own editorial beat, three words, plain.* + +**MB** — Rex stepped up in front of him. Took his time. He knew Quinn couldn't move — the whole room knew. He cleared his throat, and the spit hit the side of Quinn's head. **"Thought you were quick, Level One?"** The auditorium erupted. Rex grinned and took a bow. And Quinn stood there with it running down his face, because he couldn't show three hundred trained killers what he really was. It was so unfair. His fists clenched — and the floor cracked, one hairline fracture splitting the tile under his feet. The room was too busy laughing to notice. + +## SAMPLE 4 — THE IMPOSSIBLE ACCEPTANCE · from FLBM "Bond" (shipped) +*What it teaches: the device's one-word verdict; the crowd as a punchline chorus; the sacrifice in a single sentence; acceptance built from three flat lines.* + +**MB** — The nurse set the scanner flat against Karl's arm. The panel lit red. Seven. Laughter broke across the rows behind him, and Kruger tilted his forearm so Karl could see the fourteen from across the room. **"Seven,"** someone repeated, like a punchline. **"Three below the minimum."** The soldier by the cart stepped forward. **"Below ten, this injection is fatal. You can go home, mine kid."** His mother had sold the last of her pension to put him in front of this needle. Karl looked at it. **"I want to try."** The room went quieter than it had been before the laughter. **"Where's the death waiver?"** The soldier pulled a single sheet from the briefcase at his feet. **"You die, your family gets nothing."** He signed it without reading the rest. + +## SAMPLE 5 — THE PRICE OF BEING RIGHT · from WBT "Five Exams" (shipped) +*What it teaches: the kneel; knowledge offered free and mocked; crowd voices doing the cruelty so the villain can watch; the turn landed in one short closing line.* + +**MB** — The Mantis's forelimbs rose, cornering Ren against the rock, and Kai crouched at the lip of the ravine to watch. **"Kai. The arm locks before it strikes. Hit it then and it goes down. I'm telling you exactly how."** **"That's the funny part, gray badge. You know exactly how. You just can't do it."** Kai smiled. **"Beg me to do the one thing all your knowing can't. Beg loud — so even Klein can hear it."** His posse spread along the ridge, laughing, in no danger at all. **"On your knees, mushroom. You're good at kneeling."** The scythe-arms rose to their full height. And Ren got on his knees. **"Please. Please, help me. Hit it where I told you. Please."** + +--- + +## HOW W3 USES THIS FILE + +1. **Loaded with the register anchors into Steps 2–3.** When a run mines a proven script, it keeps the winner's sentences nearly verbatim (tense-fold, name insertion, apparatus stripped) — the narration is already written; do not rewrite it into any house style. +2. **When a run writes FRESH narration** (source-only shows, authored beats), it imitates these five — the rhythm, the interleave, the one plain verdict at the punch — not a cap and not a quota. +3. **Lint tripwires only** (checklist-side): a narration sentence over ~35 words · a "the way you'd…" scaffold in narration · four+ consecutive sentences under 6 words · more than three narration sentences between voiced lines inside a confrontation beat. Tripping one flags the block for a re-read; nothing mechanical rewrites toward a number. +4. **The calibration exemplar** (`PE_KissTheHand_W3_ReverseEngineered`) gets recut against this file — its narration folded back toward the PE asset's own sentences — before the next run calibrates on it. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/brief_template.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/brief_template.md new file mode 100644 index 0000000..5cf30d0 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/brief_template.md @@ -0,0 +1,27 @@ +# THE SCENE BRIEF TEMPLATE · v4 — the per-promo layer, derived mechanically from W2/W3 material +*(v3 delta — the six derivation laws from the Round B failure, where the constitution held and the BRIEF failed. v4 delta — laws 7–8 from the Disowned run, where every gate passed and the briefs still staged an 83%-narration script. A brief that violates a law below produces writer defects that are the brief's fault, not the writer's.)* + +**THE CONCEPT BUDGET (governing law):** at most 3–4 world concepts in play per scene, each paying emotionally in-scene; cold opens lean lower; plants that pay later move later; XFERs needing untaught systems reposition; stakes-free beats cut. Over-budget material is a structure defect routed upstream. + +## THE EIGHT DERIVATION LAWS (1–6 Round B · 7–8 Disowned) + +1. **COLD-LISTENER TRANSLATION.** Every WORLD/LORE sentence is written in a stranger's vocabulary. Source-artifact and institutional jargon ("the phase is live," "graded," "the board") never transmits untranslated — if a person wouldn't say it to a friend, rewrite it before it enters the brief. +2. **TURN MAPS END ON THE HERO.** Every exchange floor closes on the hero's answer or a marked silence — never on an unanswered blow. A map that hands the villain the last word stages a passive hero, and cruelty on a passive hero is misfortune, not injustice. +3. **PREREQUISITES TRAVEL.** A mid-promo or anchor scene lists every concept an in-scene beat depends on that earlier scenes taught (or would have) — carried as WORLD facts. A beat leaning on an untaught concept is taught in-brief or cut. +4. **LEDGER PHRASINGS ARE CONCRETE.** Listener-knows and lore sentences get transcribed into prose verbatim — so they are written physical and literal, never thematic ("saving her and feeding on her are the same act" ✗ → "to take the blood he has to put his mouth to the wound" ✓). A phrasing that would read as mush in the script may not enter the brief. +5. **MECHANISMS ARE LITERAL, OR THE EVENT RESTAGES.** Any device an event uses (how a wound is treated, how a power works) is stated as a literal canon how. If canon supplies no mechanism, the event is restaged to canon shapes — never transmitted as mystery for the writer to hedge ("the way only his kind could"). +6. **EVERY ROW IS CANON-CHECKED.** Each lore sentence, backstory beat, and XFER is verified against the world doc before it enters the brief (ages, years, pronouns, abilities). Collisions surface as OPEN items with a proposed **-adapted** resolution (precedent: speaker/addressee adaptations, words untouched) — never silently transmitted, never silently fixed. +7. **EXCHANGES ARE THE COUNTED UNIT.** A budget derivation names the scene's exchanges and their turn counts first; **"narration beat" is banned as a counted unit** — narration is mortar between events, never counted mass. A scene whose derivation can't name its exchanges is under-staged: route to W2 for material, never fill with narration. *(Absorbs the old turns-plus-narration-beats arithmetic in W3 §1. Evidence: Disowned briefs counted "~6 narration beats" per scene → the writer delivered 130 narrator blocks vs 61 voiced lines, exactly on budget.)* +8. **XFERS ARE RUNGS, NOT THE EXCHANGE.** A turn floor counts rendered turns; XFERs sit inside it as fixed rungs, and **the writer voices the turns around and between them** in the characters' registers. A floor built only of XFERs stages transfer-and-narrate — the documented v3 verbatim-transfer anti-pattern. *(Evidence: Disowned S1's entire voiced content was 7 XFERs.)* + +## THE SEVEN BLOCKS + +1. **THE WORLD** — ≤6 plain sentences; only facts this scene's events touch; law 1 and law 3 applied. +2. **THE LISTENER-KNOWS LEDGER** — each secret as ONE concrete reusable sentence, **ASSIGNED to the moment where it fires** (or explicitly tagged background-only) — an unassigned ledger invites sprinkle. Empty at a cold open (say so; gaps marked by verdict and body). **One fact, one home:** a fact appears in exactly one block (WORLD, LEDGER, or LORE) — duplication signals importance at random. +3. **LORE, PRE-STATED** — every needed backstory fact, plainly, source named; **every number supplied — writers never mint one**; hero-facts stated as truth. +4. **THE INJUSTICE SPEC** — per unit: ACT (quotable) · PUNISHER + how the act is cited · GAP (one sentence). +5. **EVENTS, TELEGRAPHED** — bare clauses in order; exchanges carry numbered turn floors (speaker + speech-act + content-clause; extend while escalating, never shrink; **close on the hero**); XFERs verbatim with trigger speech-act and addressee. **The list OPENS with the map's IN state (TIME included, every CARRY item due to be touched, and the scene's BECAUSE — the prior-scene event that forces this one, which the opening stretch makes felt) and CLOSES with the OUT state and the seam voice** — the continuity contract rides inside the events, not as a side note. +6. **VOICES** — 1–2 plain lines per speaker; their phrasing never enters narration. +7. **BUDGET + POV + FORMAT** — word target, POV/tense, tags, scene position. + +**Derivation bans:** no authored dialogue outside verbatim XFERs · no authored narration · no rendered STAGE prose carried over · no craft advice or rule cross-references · nothing from outside the W2/W3 artifacts and world docs. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/bucketing.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/bucketing.md new file mode 100644 index 0000000..b882626 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/bucketing.md @@ -0,0 +1,465 @@ +# ============================================================ +# BUCKETING FRAMEWORK +# STATUS: LIVING DOCUMENT — project default for script intake triage +# PURPOSE: Answer the two keys for a submitted SCRIPT — +# Key 1 (CPI): is the execution strong enough to obligate an install? +# Key 2 (BOFU, check #1): is it true to the show — including tone? +# SCOPE: Writer craft + show truth, NOT structural architecture. +# Structural diagnosis lives in Workflow 5 (Analysis — Deep Dive). +# The full Key 2 BOFU scorecard (empathy, thruline, cliffhanger type) +# lives in workflow5_analysis.md and is applied alongside this file. +# ============================================================ + +# WHAT THIS IS + +Bucketing is the **script-level instrument for the two keys** (see `workflow5_analysis.md` → THE TWO KEYS). It runs **two independent gates**, both pass/fail, both required: + +1. **QUALITY GATE (Key 1 — CPI).** How well was this script executed? Is the writing strong enough to obligate a cold viewer to install? Scored 1–5 (the "bucket"). **Bucket < 3 = FAIL.** +2. **SHOW FIDELITY GATE (Key 2, check #1 — the most important BOFU check).** Is this recognizably the show it is promoting — in world, cast, mechanics, Essence, AND tone? Clean **PASS / FAIL.** + +**A script passes bucketing only if it clears BOTH gates.** A Bucket 4 script that breaks show tone (e.g. a torture/death-collar premise grafted onto a show that isn't that dark) **FAILS** — on the fidelity gate, with reasons — no matter how clean the execution. A perfectly on-show script with a dead opening **FAILS** — on the quality gate. The gates are independent; either one fails the script. + +## What the Quality Gate measures (and what it deliberately does NOT) + +The Quality Gate measures five things, and only these five: + +1. **Opening** — does it stop the scroll for cold paid traffic? +2. **Cliffhanger** — does it withhold the payoff and push the install? *(Craft/withholding. Whether the cliffhanger is the RIGHT kind — a discrete must-resolve hook vs. a vague world-expansion — is Key 2 check #4, scored in workflow5, not here.)* +3. **Writing Style & Voice** — writing quality, voice consistency, and craft-level **tonal control** (does the register stay disciplined, does it match the stakes at each beat). **This is the writer's tonal control, NOT whether the show's tonal world is honored** — that is the Show Fidelity Gate (the tone split, below). +4. **Scene Quality** — scene-based construction with locations, action, and characters doing things; not narration-heavy prose. Rolls in character execution and screentime economics. +5. **Dialogue Ratio** — enough dialogue volume to function as a multi-voice audio production. + +The Quality Gate does **NOT** measure show fidelity, Essence match, beat faithfulness, or show-tonal-fit. Those moved to the Show Fidelity Gate. It also does not run IM gate audits, BECAUSE-chain verification, or hook-engine evaluation — those are Workflow 5 Deep Dive. + +## The tone split (important) + +Tone is judged in **two different places** and they must not be confused: + +- **Craft-tonal-control → Quality Gate (Writing Style & Voice).** Is the register consistent scene-to-scene? Does it match the stakes? Does the writer avoid comedic undercut on a life-or-death beat or system-language over an emotional peak? This is about whether the *writing* is tonally disciplined. +- **Show-tonal-fit → Show Fidelity Gate.** Does the premise and emotional register *belong in this show*? A promo can be tonally disciplined (clean craft) and still advertise a show that doesn't exist — by being darker, more graphic, more extreme, or more cynical than the source's actual register. The Dana choke-collar case is a show-tonal-fit failure: the writing may be controlled, but the show isn't that show. **It fails the Fidelity Gate on tone, not the Quality Gate.** + +--- + +# DESIGN PRINCIPLES + +**Anchors carry the ceiling, triggers carry the floor.** Each Quality dimension has two scoring instruments: hard downgrade triggers (named failure modes that lower the score) and PE anchor excerpts (concrete examples of 5-level execution). No STRONG checklist. If the script has no named failure and no anchor-level line to cite, it scores 3 or 4 by judgment, not checklist. + +**WEAK is the default, STRONG must be earned.** Default score is 3 (functional). Triggers move it down. Promotion requires positive evidence: 4 for strong execution with at most one minor note, 5 only for anchor-level work with specific lines cited against the PE anchors. "No obvious problems" is not evidence for 5. + +**PE anchors are the reference point.** The two-key calibration set (below) is the reference. Score 5 on any dimension means the script executes at the level of the anchor excerpts cited. + +**Quality and Fidelity are independent.** A script can ace one and fail the other. Score them separately. Do not let clean execution soften a fidelity break, and do not let strong fidelity rescue a dead opening. + +**Market truth is the highest calibration authority.** If a script is known to have scaled in market, that is ground-truth evidence it cleared both keys — it converted cold traffic AND held paying users. The framework's job is to *explain* a proven winner, not to FAIL it. When a gate verdict contradicts a known result, the gate is miscalibrated: reopen the call, find what the script is actually doing right, and bank it as a calibration anchor. A confident FAIL on a validated winner is a bug in the tool, not a flaw in the script. (Corollary: never let a clean-looking rubric talk you into rejecting something the market has already approved. Ask what the rubric is missing.) + +**Distribution target.** Bucket 3 is the mean. Bucket 5 is rare by construction. Bucket 1 exists in most batches. Fidelity FAILs are real but should be reserved for genuine show-breaks — be especially careful not to fire one on a structure (like a subverted desire, below) that actually serves the show. + +--- + +# FAST PATH — KILL CHECK (run first, always) + +Before scoring, run this 60-second check. If any trigger fires, the verdict is knowable immediately. Exit to the compressed diagnostic, cite the trigger, name which gate failed, and stop. + +**Quality-gate kills (→ Bucket ≤ 2 → Key 1 FAIL):** + +1. **Dead opening** — first 60 seconds are worldbuilding / narrator backstory, no stakes, no conflict, no protagonist presence → **Bucket 1** (Opening = 1). +2. **Passive protagonist in opening** — things happen around them for the first minute; no voice, no agency, no held ground → **Bucket 2** (Opening ≤ 2). +3. **Central resolution leaked** — the emotional payoff the app should carry is delivered in-script; the final third closes more loops than it opens → **Bucket 2** (Cliffhanger = 2). +4. **Craft tone contradicts stakes throughout** — comedic undercut on life-or-death beats, gamified/system language sitting on peak emotional moments across the script → **Bucket ≤ 2** (Writing Style & Voice ≤ 2). + +**Fidelity-gate kills (→ Key 2 FAIL, regardless of bucket):** + +5. **HARD BLOCK or spine fabrication** — a HARD BLOCK violation (see `series_worlds.md`), or a fabrication at the spine of the angle (e.g. "the book" in MVS, a fabricated central relationship/mechanic the promise depends on) → **Fidelity FAIL.** +6. **Essence bastardization** — the protagonist's identity, combat behavior, power source, or voice register is fundamentally contradicted across two or more Essence dimensions with no correction by the landing (the listener will not recognize this character) → **Fidelity FAIL.** +7. **Show-tonal-fit break** — the premise or register is darker, more graphic, more extreme, or more cynical than the show actually supports (the Dana choke-collar case). The script advertises a show the install won't find → **Fidelity FAIL.** + +If a quality kill AND a fidelity kill both fire, name both. If any fires → write the compressed diagnostic, cite the trigger(s), stop. + +If none fires → score the Quality Gate, then run the Show Fidelity Gate. + +--- + +# GATE 1 — THE QUALITY GATE (Key 1: CPI) + +Five dimensions. Three primaries carry veto power (MIN of the three sets the bucket ceiling); two craft floors pull down within that ceiling. + +## Primary (3) — any one caps the bucket at its score + +1. Opening +2. Cliffhanger +3. Writing Style & Voice + +## Craft floor (2) — pile up to pull the bucket down within the primary ceiling + +4. Scene Quality +5. Dialogue Ratio + +Each dimension is scored 1–5: + +- **5** — Anchor-level. Executes at the level of the PE anchors on this dimension. +- **4** — Strong. One minor note, no structural impact. +- **3** — Functional. Identifiable problems, works in stretches, not a bottleneck. +- **2** — Poor. Multiple problems. This dimension is a bottleneck. +- **1** — Broken. Fundamental failure. + +--- + +## 1. Opening *(primary)* + +**What it measures:** Does the opening stop the scroll for cold paid traffic? + +### Two valid modes + +**Mode A — Action-forward (Weapons-style).** Line 1 opens with active verb, direct stakes, or immediate physical conflict. Protagonist is in motion or under attack from word one. + +**Mode B — Injustice-forward / empathy-build (Ebony / RD-style).** Line 1 is dialogue-as-injustice — contempt, humiliation, violation, dismissal — landing on impact. Protagonist is the target but holds voice and agency. The thumb-stop is emotional stakes, not physical action. + +Both modes qualify for 5. The shared requirement: first IM inside 60 seconds, protagonist present with voice or reaction, no exposition block >40 words before the first conflict. + +**POV convention — first-person opening lines:** Either mode may open with first-person opening lines (protagonist's voice, direct address) before shifting into third-person narration for the body. This is a proven convention (see Weapons anchor: *"If anyone in this room found out what I was, I wouldn't make it out alive."*) — the 1P lines are a thumb-stop accelerant; the shift to 3P is structural, not a flaw. Applies to opening lines only, not extended 1P scenes. A 1P→3P transition does NOT trigger a downgrade as long as the register stays consistent across the shift. (If the transition also breaks register — confessional whisper to bright adventure-narrator — score that under Writing Style & Voice, not here.) + +**Cold-open-then-flashback** (Supermarket / TBB-style: open in medias res at a later high-tension moment, then "twenty-four hours earlier") is a single justified hard cut and a proven accelerant — it does not count against the opening. + +**Hard downgrade triggers:** + +- Exposition >40 words before the first IM → cap at 3. +- Exposition >150 words before first conflict → cap at 2. +- Protagonist with no voice/agency in the opening → cap at 2. +- First 60 seconds are worldbuilding / narrator backstory with no conflict (kill check) → cap at 1. + +**PE anchor excerpts:** +- *Mode A (Weapons):* opening hook line *"If anyone in this room found out what I was, I wouldn't make it out alive,"* into the draft board calling his name to a laughing room and Erin's *"There must be a mistake. He's a Level One."* +- *Mode B (Ebony):* *"They chained the woman with irons in the middle of the castle courtyard. / 'Burn her! Dragon witch!' / The woman made one mistake. Having a dragon. That was a man's privilege."* +- *Mode B + cold-open (Supermarket):* bank robbery in medias res — *"Brian was on his knees in the middle of a bank robbery with a bullet in his thigh and his chest glowing green"* — then *"Twenty-four hours earlier, a car salesman spit in his face,"* into the showroom humiliation. + +--- + +## 2. Cliffhanger *(primary)* + +**What it measures:** Does the close withhold the emotional payoff and push the install? *(Craft and withholding only. Whether it's the right TYPE of cliffhanger — discrete must-resolve vs. vague world-expansion — is Key 2 check #4, scored in workflow5.)* + +**Hard downgrade triggers:** + +- Central emotional resolution delivered in-script (kill check) → cap at 2. +- Protagonist past the threshold (action completed, consequences fully unfolding) → cap at 3. +- No CTA / no forward-facing questions at close → cap at 2. +- Final third closes loops faster than it opens them → cap at 3. + +**PE anchor excerpts:** +- *Ebony:* *"Who is Boris? Why does a vagrant move like a soldier? Why does a beggar carry a dragon? And why does Nova — an ancient spirit who has been alive for a thousand years — recognize the dragon inside him?"* +- *Weapons:* *"What will happen when the whole school is hunting his secret? What did Leo see before? How will Erin react when she finds out her teammate isn't an Original — he's a vampire!?"* — questions mapped to the new threats, not the old mysteries. + +--- + +## 3. Writing Style & Voice *(primary)* + +**What it measures:** Is the writing style, voice, and tonal register consistent across the script? Does every scene read as the work of the same writer? Does the **craft tone** match the stakes at every beat? Does the peak beat land with physical specificity rather than narrator explanation? This governs *how the words sound* at the sentence level and across the arc. + +**Boundary:** This measures the *writer's* tonal control — consistency, differentiation, stakes-matching. Whether the protagonist sounds like the *source character's* specific voice register is the Show Fidelity Gate (Essence → Voice Register). Whether the *premise/register belongs in the show* is the Show Fidelity Gate (tone-fit). Do not double-count. + +**Hard downgrade triggers:** + +- Voice shifts scene-to-scene (different writer energy) → cap at 3. *(Exception: the proven 1P-opening-lines → 3P-narration convention is not a voice shift, as long as the register holds across the shift.)* +- Flat tone throughout (same register across every beat) → cap at 2. +- Gamified / system language in a peak emotional beat → cap at 3. +- Comedic undercut in a life-or-death scene → cap at 3. +- Interchangeable character voices (dialogue swappable between characters) → cap at 3. +- Peak beat carried by narrator explanation instead of physical specificity → cap at 3. + +**PE anchor excerpts:** +- *Ebony (tonal control + peak landing in the body):* *"Thirty years of rule. Nobody had ever left that hand unanswered. / She stepped away from her father. / [SFX: DEAD SILENCE] / The room went silent. The hand stayed extended. Unanswered."* — register calibrated, breath sentence before the reaction, no narrator essay on top. +- *Weapons (system language earning its place):* *"His vision shifted... I could see attack trajectories before they formed,"* and the System chiming only *at the moment it earns its place* — not laid over emotional beats elsewhere. + +--- + +## 4. Scene Quality *(craft floor)* + +**What it measures:** Is this written in scenes — locations, dialogue exchanges, physical action, characters doing things — or is it narration-heavy prose? Rolls in character execution (do characters make active choices with visible cost; do antagonists have differentiated teeth) and screentime economics (is every character and beat earning its page count). Format-level craft: sluglines, SFX placement, physical-verb specificity. + +**Hard downgrade triggers:** + +- Any scene without a named location → cap at 3. +- Narrator block >5 sentences without dialogue → cap at 3. +- Passive protagonist at script level (no active choices with visible cost) → cap at 2. +- Antagonist diffusion (2+ antagonists sharing one role) or interchangeable generic bully → cap at 3. +- Major character gets full establishment then disappears, or a beat repeats without escalation → cap at 3. +- Prose-format throughout (reads as audiobook chapter, not multi-voice production) → cap at 2. + +**PE anchor reference:** Weapons has Rex (alpha bully), Loop (sycophant second), Leo (suspicious authority), Erin (powerful ally) — each doing something only they can do, each in built scenes with named locations and physical action. Ebony has Liam (systemic cruelty), Edwin (petty cruelty), Beriod (violation), Geralt (counter-voice of decency). + +--- + +## 5. Dialogue Ratio *(craft floor)* + +**What it measures:** Is there enough dialogue volume for the script to function as a multi-voice audio production? Audio promos are carried by voices; a narration-dominant script flattens to a single read. + +**Hard downgrade triggers:** + +- Dialogue volume noticeably below the production target across the script (long narration stretches with sparse exchanges) → cap at 3. +- Dialogue present but interchangeable / functionless (filler that doesn't carry stakes or character) → cap at 3. +- Near-total narration with isolated dialogue islands → cap at 2. + +**Calibration caution — the 1P-narrator format runs narration-heavy by design, and it scales.** Weapons is first-person Quinn narration end to end; the Weakest Beast Tamer winner is solo Ren narration through long stretches of the forest. Do NOT cap on raw dialogue *percentage* for a strong-1P-voice script — a charismatic, propulsive narrator carrying the audio is a feature, not a thinness flaw. The real failure mode is **functionless or flat narration** (telling without tension, a voice that doesn't compel), not low dialogue count. Reserve the ≤2 cap for narration that is genuinely inert — and even then, weigh it against whether the narrator voice is doing the work a second speaker would. When in doubt, score against whether the *audio would hold a listener*, not against a dialogue ratio. + +**Note:** The PE anchors also run dense, differentiated dialogue carrying the stakes (the auditorium exchanges in Weapons coexist with heavy narration; the ballroom and council exchanges in Ebony). Use them as the function reference — dialogue that carries stakes and character — not as a volume quota. + +--- + +# QUALITY GATE AGGREGATION (THE BUCKET MATH) + +1. **Bucket ceiling = MIN(Opening, Cliffhanger, Writing Style & Voice).** Any primary at score N caps the bucket at N. +2. **If 1 craft floor (Scene Quality / Dialogue Ratio) is ≤ 2**, cap the bucket at 4. +3. **If 2 craft floors are ≤ 2**, cap the bucket at 3. +4. **Floor at 1.** + +**The pass line: Bucket ≥ 3 = Key 1 PASS. Bucket < 3 (i.e. 1 or 2) = Key 1 FAIL.** A failed quality gate fails the script — name the bottleneck dimension and the fix. + +**Why MIN-of-primaries, not average:** average lets a dead opening or a leaked cliffhanger get drowned by clean prose. The primary/floor split gives the three CPI-critical pillars veto power. MIN enforces it. + +--- + +# GATE 2 — THE SHOW FIDELITY GATE (Key 2, check #1: true to the show) + +**Clean PASS / FAIL.** This is the single most important BOFU check — a script that converts a cold viewer who then finds a show they don't recognize churns immediately. The gate covers three surfaces; **a hard break on any one is a FAIL:** + +1. **Surface fidelity** — world, cast, mechanics, events, vocabulary are the show's own. +2. **Essence fidelity** — protagonist's Identity, Combat Behavior, Power Source, and Voice Register match the Essence block. The world file's verbatim Voice Samples are the tuning fork; the Drift Tripwires are the early-warning system. +3. **Tone-fit** — the premise and emotional register belong in this show. Not darker, not more graphic, not more extreme, not more cynical than the source supports. *(This is the home of the Dana choke-collar FAIL.)* + +## Gradient weighting (landing matters more) + +Fidelity is judged across the arc, weighted toward the landing — the install decision happens in the last 60 seconds. A script that starts on a broader archetypal frame and lands fully on-show by the final third **passes**; a script that feels on-show early but drifts in the final third hurts conversion and can fail. Both surface fidelity and Essence fidelity are judged on this gradient. **But the gradient is a tolerance for the *opening*, not a rescue for the *landing*: if the final third is off-show, off-Essence, or off-tone, the gate FAILS.** + +## Hard-FAIL conditions (no landing rescues these) + +- Any HARD BLOCK violation (cross-check `series_worlds.md`). +- Central emotional promise built on a fabricated mechanic / relationship / character (spine fabrication). +- Core show vocabulary renamed throughout. +- Multi-dimension Essence bastardization persisting through the landing (the listener will not recognize the protagonist). +- **Show-tonal-fit break** — premise/register outside the show's actual register (Dana choke-collar). A controlled, well-written torture premise on a non-dark show still FAILS here. +- Beat sheet (when provided) and script tell materially different stories, or the BECAUSE chain breaks from reordering/omission. + +## Score what the promo DELIVERS, not what a character WANTS (read this before failing anything) + +The fidelity question is **what the promo sells as the show and what the listener will actually find** — not every aspiration a character voices along the way. A protagonist can *want* something off-engine and the promo can still be fully on-show, as long as the narrative subverts or redirects that want toward the canon engine. + +Before scoring an engine/power-source drift, separate the two: + +- **Stated desire** — what the protagonist says they're after ("I need to find the flower so I can tame a second beast"). This is motivation. It can be off-canon and still fine. +- **Delivered promise** — what the promo's actual payoff and cliffhanger sell, and what the listener will find in the show. This is what fidelity scores. + +A drift tripwire fires on what the protagonist **does and the promo delivers**, never on what they momentarily wish for. Example: WBT's "beast as proxy" tripwire is about Ren *using a beast to fight for him*. A Ren who *wishes* for a stronger beast but keeps the weakest one and wins with his own wits has not tripped it — the script is dramatizing the exact opposite, on-theme. If the cut lands on the canon engine (knowledge awakening), the desire was a hook, not a break. + +**Only score a delivered-promise fidelity break when the payoff or cliffhanger genuinely sells the off-engine thing** — e.g. the promo actually hands the protagonist the proxy beast and builds the install hunger on "what monster does he get next." Wanting it and being denied it (or redirected from it) is legitimate structure. + +## PASS with notes (drift that lands home, or a hook that gets subverted) + +- Opening establishes a broader frame, second half locks fully into show world, characters, and tone; final third is unmistakably on-show → **PASS** (note the gradient as "starts broad, lands home"). +- One Essence dimension shows minor early drift (voice slightly more confident than source, combat slightly simplified) that corrects by the final third, no Drift Tripwire firing → **PASS** with a note. +- **Subverted-desire hook** — the protagonist chases an off-engine goal that the narrative redirects toward the canon engine, and the payoff/cliffhanger lands on-show → **PASS**. Note it as "subverted desire, lands on canon." This is a *strength*, not drift: it uses a broad, legible want as the hook and pays off the show's real theme. (See edge cases: the WBT Weakest Beast Tamer pattern, validated in market.) + +## Improvement vs. drift (when a beat sheet is provided) + +Not every deviation from the locked beat sheet is drift. Before scoring a deviation as a fidelity loss, apply the improvement test: + +1. **Does the deviation fix a logical inconsistency in the beat sheet?** (timing contradiction, a mechanic that doesn't survive the show's rules) → neutral. The writer caught an upstream problem. +2. **Does it serve the same structural purpose with higher tension, sharper stakes, or more concrete cost?** (replacing "pushes past a proctor" with a bribery scene that spends the mother's savings) → neutral or positive. +3. **Does it add show-accurate material that extends the promo's reach into the listener's landing world?** (an added Academy scene dramatizing the status system) without bloating screentime or repeating a banked emotional beat → positive. + +A deviation that fails all three is drift — judge it on the gradient. A deviation that passes one or more is an improvement — note it as "beat improvement" with the test cited so the beat-sheet author can back-port it. **Caution:** the improvement test never overrides a HARD BLOCK, a spine fabrication, a tone-fit break, or a BECAUSE-chain break. + +**Process note:** When the beat sheet is clean but the script drifts and the Quality Gate is ≥ 4, the drift is usually a *process* signal (onboarding, handoff clarity), not a *craft* signal. Flag it — the next conversation is with the beat sheet / onboarding, not the writer. + +**References:** `series_worlds.md` (HARD BLOCKS) + `world_[abbrev].md` (Essence block: Identity, Combat Behavior, Power Source, Voice Register, Voice Samples, Drift Tripwires, Setting Essence, Sensory Samples) + the locked beat sheet when provided. **The Essence block is the single source of truth for how the protagonist should feel on the page.** + +--- + +# THE OTHER THREE BOFU CHECKS (Key 2, checks #2–4) + +Bucketing scores the two gates above. The remaining three BOFU checks are scored in `workflow5_analysis.md` (THE TWO KEYS → BOFU SCORECARD) and apply to every artifact, script included. Surface them in the bucketing diagnostic when they fire on a script, but the fidelity gate is the only Key-2 element that bucketing itself pass/fails: + +- **#2 — Empathy build, especially before the cliffhanger.** Has the audience earned the right to care by the climax, and is empathy peaking in the run-up to the cut? (Injustice density feeds this.) Surface as a flag if empathy depletes after the first third or runs cold into the cliffhanger. +- **#3 — Unifying theme / thruline that aligns with the show.** Is there one relatable thruline ("everyone has been underestimated / had something to hide"), and does it match the show the listener gets at BOFU? +- **#4 — Discrete must-resolve cliffhanger vs. world-expansion.** Are we selling a specific conclusion a listener will be desperate to see (the killer revealed, a one-on-one match called), or something vaguely "bigger" that expands the world? Discrete and must-resolve converts harder. Flag a diffuse, world-expansion-only cliffhanger. + +--- + +# BUCKET DEFINITIONS (Quality Gate) + +## Bucket 1 — TRASH / NO CONFIDENCE +**Primary ceiling = 1.** Does not function as a paid-acquisition tool at a basic level. Multiple primaries at 1: broken opening AND tonal inconsistency AND/or no cliffhanger. **Directive:** do not attempt to fix, do not advance to Deep Dive. New writer or fundamental retraining. **Anchor:** Hierarchy (MVS) — passive protagonist, comedic tone undercutting action, system UI replacing emotional stakes, no CTA. + +## Bucket 2 — SIGNIFICANT REWORK +**Primary ceiling = 2, OR ceiling ≥ 3 with both craft floors ≤ 2.** Identifiable ambition or correct raw material, but execution is off at a level requiring rework, not line edits. Common signals: flat tone, prose-heavy narration, cliffhanger that leaks resolution, dialogue too sparse for audio. **Directive:** diagnose the failures; determine whether the writer can course-correct or the script needs rebuilding. **Anchor:** TBD. + +## Bucket 3 — NEEDS FIXES +**Primary ceiling = 3, craft floors mostly ≥ 3.** The writer has craft; the question is calibration. Works in stretches with specific, nameable problems: lede-burying, exposition frontloading, loose screentime, an over-written section. **Directive:** name the fixes; revision notes, not a rebuild. **Anchor:** Proving Trial (FLBM) — Opening = 3 (emotional pivot buried under exposition), Scene Quality = 3 (beast-tamer exposition runs long), other dimensions 4–5. + +## Bucket 4 — MINOR FIXES +**Primary ceiling = 4, both craft floors ≥ 3.** Functional, close to production-ready. One identifiable weak spot — a slightly slow opening, a cliffhanger that could be sharper, a section 10% too long. **Directive:** polish notes; ready for Deep Dive after one pass. **Anchor:** Rotting Boy (WBT) — Opening = 4 (could use more action up front), everything else 5. + +## Bucket 5 — EXCELLENT / SHIP-READY +**All primaries = 5, both craft floors ≥ 3. Rare by construction.** Opening stops the scroll (either mode), cliffhanger withholds payoff, voice is consistent and tonally disciplined, scenes are built, dialogue carries the audio. May still have structural issues Deep Dive catches. **Directive:** advance to Deep Dive; if structure is sound, ship. **Anchors:** +- **Weapons / Draft Selection (MVS).** System-based, Mode A line-1 thumb-stop with 1P hook, escalating protagonist agency, consolidated bullies, micro-cliffhangers at scene breaks, full-reveal cliffhanger with consequences unwritten. +- **Princess Ebony (PE).** Romantasy, Mode B injustice-forward opening, consolidated antagonists, internal parallel voice (Nova), peak beats that breathe (the unanswered hand), cliffhanger AT the threshold (Boris reveal pending). +- **Supermarket / TBB.** Cold-open-then-flashback, RD-style humiliation thumb-stop, jade-pendant power discovery, peak landing in the body. + +--- + +# EVALUATION PROCEDURE + +## Step 1: Read cold. +Read the full script once without stopping. Note gut reactions — where you stopped paying attention, where you leaned in, where something felt off-show. + +## Step 2: Run the Fast Path kill check. +Walk the seven kill checks. If any fires → skip to Step 6, cite the trigger, name the failing gate(s), stop. + +## Step 3: Score the Quality Gate. +Score Opening, Cliffhanger, Writing Style & Voice (primaries), then Scene Quality and Dialogue Ratio (craft floors). Walk the triggers. **Evidence rule:** cite quoted script evidence only for dimensions that score ≤ 3 or = 5; functional 4s carry the score. MIN of the three primaries, adjusted by craft-floor pile-up, = bucket. Bucket < 3 = Key 1 FAIL. + +## Step 4: Run the Show Fidelity Gate. +Read the world file's Essence block alongside the script. Check surface fidelity, all four Essence dimensions (+ Drift Tripwires), and tone-fit, on the landing-weighted gradient. **PASS / FAIL.** For any drift at issue, name the surface (surface / Essence-dimension / tone) and cite the specific contrast — what the show/Essence says vs. what the script delivers. A hard-FAIL condition = FAIL regardless of the bucket. + +## Step 5: Adversarial pass — boundary only. +In writing **only when bucket ceiling = 3 or 4**, or when the fidelity gate is borderline. *Which dimension am I most likely overscoring, and why? Which PE anchor is closest on the ceiling-setting primary? Is the tone-fit call defensible against the show's actual register?* For a clear bucket and a clean fidelity call, run it mentally. + +## Step 6: Compute and write the compressed diagnostic. +Apply the verdict logic, use the output format below, keep it tight. + +--- + +# VERDICT LOGIC + +``` +QUALITY GATE (Key 1): Bucket [1–5] → PASS if ≥ 3, FAIL if < 3 +FIDELITY GATE (Key 2): PASS / FAIL + +SCRIPT VERDICT: + PASS — only if Quality Bucket ≥ 3 AND Fidelity = PASS + FAIL — if either gate fails. Name which gate(s) and why. +``` + +A FAIL is a FAIL even when the other gate is strong. A Bucket 5 script that fails tone-fit is a FAILED script with a clear reason. A fidelity-clean script at Bucket 2 is a FAILED script with a clear reason. + +--- + +# OUTPUT FORMAT — THE DIAGNOSTIC + +Write the diagnostic as **readable markdown — never inside a code block.** It should scan top to bottom: the verdict first, the scores at a glance, then each flaw stated at the macro level (what it is, why it costs us) with a concrete next action attached. The reader should be able to skim the headers and know the standing without parsing a grid. + +Use this layout (these are real markdown headers/tables the analyst fills in, not a fenced block): + +--- + +### [Title] · [Series] +**VERDICT: [PASS / FAIL]** — [if FAIL, name the gate(s) in plain words: "selling the wrong show (tone-fit)" / "execution not there yet (Bucket 2)" / "both gates"] + +**Key 1 — Quality (CPI): Bucket [1–5] · [PASS/FAIL] | Key 2 — BOFU: [PASS/FAIL]** + +One or two sentences, senior-editor voice, that say what this script *is* before any detail — e.g. "Strong scroll-stopping open, disciplined craft, but it's selling a darker show than TBB actually is, so BOFU won't survive it without testing." + +**Scores at a glance** + +| Gate | Dimension | Score | Read | +|------|-----------|-------|------| +| Quality | Opening | [1–5] | [≤3 or =5: one phrase; note mode A/B. 4: "clean."] | +| Quality | Cliffhanger | [1–5] | [≤3 or =5: one phrase] | +| Quality | Writing Style & Voice | [1–5] | [≤3 or =5: one phrase] | +| Quality | Scene Quality | [1–5] | [only if ≤2 or =5] | +| Quality | Dialogue Ratio | [1–5] | [only if ≤2 or =5] | +| Fidelity | True to show (#1) | [PASS/FAIL] | [surface / Essence dim / tone-fit — name it] | +| BOFU | Empathy pre-cliff (#2) | [strong/flag] | [one phrase if flag] | +| BOFU | Thruline aligns (#3) | [strong/flag] | [name the thruline] | +| BOFU | Discrete cliff (#4) | [discrete/flag] | [one phrase if flag] | + +**What's working** *(protect these)* +- [1–3 load-bearing strengths, one line each, with a line reference. These are what a revision must not break. Omit only if genuinely nothing qualifies.] + +**What's breaking** + +For each real flaw — ordered worst first — one short block: + +> **[Plain-language flaw name].** *(severity + which gate/key)* +> [Macro need-to-know: what the flaw IS and why it costs us — the listener's experience and the funnel consequence (scroll-off, churn, BOFU deception), not a dimension label. One or two sentences.] +> **→ Do this:** [the concrete next action. What to change and how. Specific enough to hand to the writer.] + +Lead with the gate-failing flaw if there is one. For a tone-fit FAIL, state plainly that the writing may be clean but it's the wrong show, and that BOFU won't survive it without testing — do not soften it inside craft praise. + +**Bottom line** +- **Action:** [rebuild / rework / revise / polish / ship] — one line. +- **Writer:** [can they hit the level with feedback, or does this need a different writer?] — one line, direct. + +*(If there are W4-improvement notes, add a short "**For W4 (secondary)**" bullet list beneath the bottom line. These never substitute for the verdict.)* + +--- + +**Why this shape:** the old single-block dump made the reader hunt for what mattered. This layout front-loads the verdict, lets the scores be skimmed in the table, and turns every flaw into a *what it is + why it hurts + what to do* unit so the operator always leaves with actionables, not just scores. + +**Tone throughout:** direct, constructive, specific — a senior editor. No system jargon in the prose ("voice & tone," "Key 2 #1") — describe what the listener experiences. The "What's breaking" blocks are the part that gets shared with the writer; each should read naturally on its own and end with something they can act on. + +--- + +# DISTRIBUTION TARGETS + +Expected across a batch of ~10 scripts, Quality Gate: + +- Bucket 5: 0–1 (rare by construction) +- Bucket 4: ~2 +- Bucket 3: ~4 (the mode) +- Bucket 2: ~2–3 +- Bucket 1: ~1 + +Fidelity FAILs are tracked separately and are **not** rare — show-truth (especially tone-fit) is where a large share of submitted scripts break, independent of craft. A high-craft batch can still have a wave of fidelity FAILs. If the Quality mean lands above 3.5, calibration is drifting up — reopen recent buckets against the PE anchors. + +--- + +# RELATIONSHIP TO OTHER WORKFLOWS + +Bucketing is **upstream** of Workflow 5 Deep Dive and is the script-level instrument for the two keys. + +| Result | Next Step | +|--------|-----------| +| FAIL — Fidelity | Do NOT advance to Deep Dive. The show-truth break (or tone-fit break) is fixed first, or the script is reassigned. A clean bucket does not buy a pass. | +| FAIL — Quality (Bucket 1) | Do NOT advance. Rebuild or reassign. | +| FAIL — Quality (Bucket 2) | Determine if the writer can course-correct. If yes, notes + reattempt at W4. If no, rebuild from W2 with a different writer. | +| PASS — Bucket 3 | Issue notes. Writer revises. Re-bucket. If it moves to 4+, advance to Deep Dive. | +| PASS — Bucket 4 | Minor-fix notes. Advance to Deep Dive concurrently or after one polish pass. | +| PASS — Bucket 5 | Advance directly to Deep Dive. | + +Bucketing does NOT replace Deep Dive. A passing script can still have structural failures (IM deserts, throughline drift, BECAUSE-chain breaks). Bucketing clears the *execution* gate (Key 1) and the *show-truth* gate (Key 2 #1). Deep Dive clears the *structural* gate. All must pass before a script ships. + +--- + +# ADDING CALIBRATION ANCHORS + +When a new script cleanly represents a bucket or a fidelity verdict, add it as a calibration anchor. Target 2–3 per bucket across different series and writers. Bucket 2 currently has no active anchor — prioritize one. Also begin a **Fidelity-FAIL anchor set** — the Dana choke-collar tone-fit case is the seed; add clean examples of each FAIL type (HARD BLOCK, spine fabrication, Essence bastardization, tone-fit break) as they appear. + +**Market-validated anchors are the highest tier.** A script known to have scaled is the strongest possible reference point — it settles the calibration argument. Bank these explicitly and weight them above rubric reasoning. + +**Fidelity-PASS anchors (subverted desire / lands-on-canon):** +- **Anchor:** Weakest Beast Tamer Gets All SSS Dragons (WBT) — *scaled in market.* Fidelity PASS. Ren's stated goal is to find the Half-Flower and tame a second beast, but the narrative subverts it: he keeps the weakest spore, fights with wits and his own body, and the payoff lands on the canon knowledge-awakening (the "blueprint" interface). The off-engine *want* is the legible hook; the on-engine *delivery* is the show. A textbook subverted-desire promo — do not mistake the hook for a break. (Earlier tooling miscalled this a fidelity FAIL by scoring the want instead of the delivery; that error is now guarded against above.) + +Format: +``` +**Anchor:** [Script Name] ([Series]). [Quality scores and/or fidelity verdict; note "scaled in market" if validated.] [1–2 sentences on why it exemplifies this.] +``` + +--- + +# NOTES ON EDGE CASES + +**The clean-craft, wrong-show script (the Dana case):** Real characters, real setting, disciplined writing — but a premise the show doesn't support (torture/death-collar stakes on a non-dark show). Quality Gate may score 4–5. **Fidelity Gate FAILS on tone-fit. The script FAILS.** The listener installs for the show they heard and finds a different, darker thing — that is where the churn lives. Do not let the clean bucket talk you out of the FAIL. + +**The subverted-desire promo (the Weakest Beast Tamer case) — PASS, not FAIL:** The protagonist chases an off-engine goal (Ren wants to tame a *second* beast via the Half-Flower) but the narrative redirects it onto the canon engine (he keeps the weakest spore and gains the knowledge awakening). The promo never *delivers* the off-engine thing — it uses the want as a legible hook and pays off the show's actual theme ("is it really the weakest, or does it harbor unlimited potential?"). **Fidelity PASS.** This is the mirror image of the Dana case and the more common analyst error: failing a script for a *desire a character states* rather than a *promise the promo delivers*. Score the delivery. This one scaled — the market settled it. (See the gate's "Score what the promo DELIVERS, not what a character WANTS.") + +**The strong writer with bad instincts (Bucket 3):** Genuine craft, uncalibrated promo pacing — buries the lede, frontloads exposition, over-writes setup. Improves fast with targeted feedback and PE-anchor exposure. + +**The Essence-drifted script with clean surface fidelity:** Uses real characters and settings, respects HARD BLOCKS, lands on-show — but the protagonist doesn't *feel* right (flattened voice, reversed combat, subtly wrong power source). Surface may pass; Essence drift through the landing FAILS the Fidelity Gate. + +**The broad-to-specific script:** Opens on archetypal injustice, narrows into unmistakable show material by the final third. The gradient working as intended → Fidelity PASS. **But broad framing does not license Essence drift** — a hero-confident Quinn in the opening (when the Essence says defiant-runt) is an Essence problem even if the surface gradient is clean. + +**The pre-show-timeline script (Essence voice calibration):** When a promo covers events BEFORE the protagonist enters the show's primary setting (Karl in the mines before the Academy, Quinn before awakening), score voice register against the Essence block's *identity description* (who the character IS) rather than the verbatim Voice Samples (how they sound in later contexts). Test: would the script's voice *plausibly become* the Samples once the character reaches the show? If yes → no drift. If it actively contradicts the identity → drift regardless of timeline. + +**The borderline script:** When a script feels between two buckets, compare against the PE anchors on each primary. The directive follows the bucket, never the reverse. + +**The script with strong craft floors but a weak primary:** The primary caps the bucket. All-5 floors with a 3 on Writing Style & Voice is Bucket 3. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/exemplar_bank.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/exemplar_bank.md new file mode 100644 index 0000000..e4009e5 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/exemplar_bank.md @@ -0,0 +1,45 @@ +# THE EXEMPLAR BANK · v1 — operator-authored passages, filed by SLOT +*(W3 attaches the matching slot to a brief when a scene contains that position — register model, never content. Deposits: operator-authored or operator-approved lines only, added at the W4 operator gate (bin 3) or at lock. The global voice model — the Ebony passage — lives in `writer_constitution.md`; this bank is position-specific. Every entry is quoted verbatim from the operator's hand unless marked APPROVED-IN-OUTPUT.)* + +--- + +## SLOT: COLD-OPEN WEAVE (orientation inside the mockery; narration/voices alternating) +> NARRATOR: In a line of warriors with wolves and boars as their beast companions, Jasper stood with a baby chick on his shoulder. +> ODELL: "Is that Jasper Cooke with a bloody chicken? Does this boy think he can win the money with a baby bird?" +> NARRATOR: The prize money was why Jasper was entering. It was the only way he could afford his mother's medicine. +> JASPER: "That's right, and don't be surprised when he beats you and your beast." +> ODELL: "Hear that, boys? The kid has finally lost his mind. Guess that's what happens when you're broke and powerless." +> NARRATOR: Before Jasper could respond, it was his turn in line. +> BRAM: "Cooke! Next in line!" + +## SLOT: THE REVEAL (the secret shared with the listener — naive pulp, played straight) +> While all the other cadets were blinded by the darkness, Quinn's secret gave him strength. He was not an ordinary cadet — he was a vampire, and little did the others know: vampires could see in the dark. Everyone thought he was here as a punching bag, as bait. Quinn smiled. How wrong they were. + +## SLOT: ACTION BEAT (sequential mechanics; object enters through perception; payoff visual last) +> Sana stumbled forward, fumbling to stay close to Quinn — and that was when he saw the tripwire. Quinn had to react before she lost a limb. He sidestepped her, grabbed her vest, and threw her backward just as the wire snapped tight and the charge exploded. The sky lit up white. Quinn collapsed to the ground, grimacing, and the trail went dark again. + +## SLOT: OFFICIAL SPEECH (institutional contempt; orientation folded in; complete announcement) +> "Listen up, I'll only say this once. When the exercise starts, you're going to only rely on each other. And you'll need to do whatever it takes to survive — that means assembling your squad so your strengths are acknowledged, and your weaknesses…" *(the sergeant looks Quinn up and down)* "…are given a chance to at least be useful. If you want my advice — have the Level Ones run point. If anything big gets in your way, at least they'll be good for something." + +And the announcement form: *"Everyone has signed, contenders to the ring square! Bring your beasts — the bell tolls the start of the tournament!"* + +## SLOT: CRUELTY BARB (conversational, explicit, twist-the-knife tag) +> "Your mother looks eighty and she's only forty… they said she could die any week now. You've taken very good care of her, huh?" + +And the bully-pragmatist form: *"I'm not going to sacrifice my own score for someone that's already toast."* · The dismissive jab form: *"Did your watch break? Level One, huh? Not exactly a force of nature…"* · Villains snipe at each other: *"He didn't see it, moron, he just figured it out when the thing exploded."* + +## SLOT: MERCY-TRAP OFFER (deal complete: condition, payment, what it buys, cost of refusal) +> "I'll tell you what. Admit that you're everything everyone says you are, and I'll give you this coin. That should be enough to buy your mother another month." + +## SLOT: GAP-MARK (the narrator on the hero's side, plain flowing sentence) +> "He'd saved Sana's life — or at least a limb. And this was how they rewarded him." +> "Nobody had any faith in a Level One. And nobody was going to stand up for him — because nobody else was as low-leveled." *(the world's indifference related to the hero personally)* + +## SLOT: HERO'S FOLD (defends his interest first; the narration states the real reason plainly) +> QUINN: "That's my flare. I'm not just going to give it to you… if I need help, I'm going to need it." +> REX: "We all know you're going to need help. And then we're just wasting a squad flare on somebody who's useless." +> NARRATOR: Quinn didn't fight Rex on the point. He didn't want to attract any more unwanted attention. He knew they were watching the cadets with cameras… any little blip might be enough to put his secret under suspicion. +> QUINN: "Fine. Take the flare." + +## SLOT: HERO'S ANSWER (short, names the choice) — APPROVED-IN-OUTPUT +> "Then everybody heard you leave." · "Then go. I'm not leaving her." · "He'll be in the ring at noon. Watch him." diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/functional_skeletons.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/functional_skeletons.md new file mode 100644 index 0000000..c3f70a1 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/functional_skeletons.md @@ -0,0 +1,307 @@ +# FUNCTIONAL SKELETONS — LIBRARY +# Proven, documented beat-orders extracted from winning promos. Each skeleton is a STRUCTURE to inherit, not flavor to consult. + +--- + +## WHAT THIS FILE IS + +A functional skeleton is the **abstracted beat-order** of a promo that has already converted — stripped to its structural functions and held as a reusable template. Each beat is recorded as a **function** (the bolded label + abstract description of the structural job that beat does) plus a **source example** (the original show's literal execution, kept only as a shape reference). + +**The function transfers. The example does not.** When a skeleton is pinned to a new show, you transplant each beat's *structural job* (injustice / reversal / accidental-contact / moral-choice / inversion / reveal) and pour the target show's own cast, container, combat, power, and IM flavor into it. A reskinned Dragon Battle that keeps the dragon is a fidelity failure; one that keeps "accidental contact with the force that later inverts status" is a correct transplant. + +## WHO READS THIS FILE + +- **W1 (Adaptation / Pinning / Extraction)** — the proper home for choosing a skeleton, inheriting its engine + structure, and locking show fidelity. New skeletons extracted from winning promos are documented HERE. +- **W2 (Skeleton) — Functional Skeleton Inheritance Mode** — loads the pinned/named skeleton and builds beats 1:1 against its order and functions. The skeleton owns ORDER; the Spine owns CONTENT. +- **W3 (Beat Sheet)** — `Functional Skeleton:` header records which skeleton was inherited (honored / drifted). +- **W5 (Analysis / Deep Dive)** — verifies skeleton inheritance: every source function represented, in order, function preserved. + +## BEAT 0 CONVENTION + +Several skeletons carry an **optional Beat 0 — Powerstart / Cold open / In medias res**. It loads secret + stakes + emotional texture (or the endpoint) before the story begins. It can be cut without breaking structure, but when it lands it is the 3-second-play-rate driver. Inheritance preserves Beat 0 as optional unless the operator drops it. + +## INDEX + +| Skeleton | Core hook | Beats | +|---|---|---| +| Weapons / Draft Selection | Secret identity | 10 | +| IMF5 | Weak → Strong / Poor → Rich | 8 (+B0) | +| Pawn Shop | Hidden identity / Weak→Strong / Poor→Rich | 10 (+B0) | +| Supermarket | Poor→Rich / Weak→Strong / Hidden identity | 12 (+B0) | +| FITP | Underdog Awakening + Secret Identity | 20 (+B0) | +| Dragon Battle | Loyalty / Sacrifice | 10 | +| Tragic Childhood | Underdog / Weak→Strong / Poor→Rich | 10 (+B0) | +| Live Action (2.0) | Underdog / Weak→Strong / Poor→Rich | 10 (+B0) | +| Phoenix / Love Bite | Secret Identity / Reincarnation | 12 | + +> Note: the source export was titled "Functional Skeletons + Three Pillars." The Three Pillars material lives separately (`Three Pillars — All Shows.docx/.xlsx`) and is not duplicated here. + +--- + +# WEAPONS / DRAFT SELECTION + +## *Core hook: Secret identity* + +**Beat 1 — Protagonist at zero.** Draft board calls his name, room laughs, Erin corrects from the front — "He's a Level One." The world's hierarchy is established through what it does to him publicly. Three hundred people recalculate his worth in real time and land on zero. + +**Beat 2 — First Reversal (public, contested) → Punished into being worse.** The sidestep. The clap-back. The room shifts — laughing at Rex instead of Quinn for half a second. Then Loop locks him in the telekinetic hold and Rex spits on his face. The reversal doesn't just fail to stick — it provokes a punishment worse than the original humiliation. The protagonist's position is now lower than where Beat 1 started. Trying to push back made it worse. + +**Beat 3 — Love interest steps in, redirects antagonist's rage to them.** Erin's ice spike between Rex's legs. She didn't defend Quinn out of affection — she defended squad property. But the effect is the same: Rex's rage transfers from Quinn to her. "You're going to regret that, Erin." The antagonist now has a target who can actually be hurt, and the protagonist knows it's his fault. The love interest is introduced through an act that puts her in danger on his behalf. + +**Beat 4 — Intro institutional stakes.** Leo steps out. One word silences three hundred people. "Ten students die a year." Phase One, Phase Two, squads dissolved. The stakes shift from social (embarrassment, status) to existential (death, elimination). The arena the protagonist is trapped in just became lethal. + +**Beat 5 — First potential reveal of the secret.** The scanner. It climbs past every known level and crashes. The proctor shrugs it off — but Leo is watching from the observation deck. The secret almost surfaces through a system the protagonist can't control. The audience holds their breath. The near-miss tells them the secret is too big to stay hidden, and the infrastructure of this world will keep trying to expose it. + +**Beat 6 — Ally bond on false foundation.** Erin sends Quinn first in Phase One. "Level playing field. You can do this." Then — "I know what you are." Blood goes cold. "A fighter." She's wrong about why, but not wrong that he is one. She shows the scar, reveals she's been hunted as an Original, pledges loyalty. "I have your back. No matter what." The bond is real. The premise is a misidentification. The audience knows this will detonate. + +**Beat 7 — Reversal earned, then stolen.** Quinn fights Loop clean. No abilities, no vampire reflexes. Lands shots, earns the crowd's silence. Then Loop cheats — telekinesis mid-duel, same technique from Beat 2. Quinn reads it this time, times the counter to the focus split, drops Loop with one clean shot. The arena goes quiet. Three hundred people recalculating. Then Rex stands up: "He cheated." The actual cheater's squad leader demands justice. The crowd buys it. Quinn can't defend himself without answering questions that kill him. The win is narratively stolen by the person who broke the rules. + +**Beat 8 — The person who chose you is about to die because they chose you.** Phase Two. Abilities live. Rex's squad doesn't try to win — they isolate Erin. Loop freezes her in the same hold from Beat 2. They beat her with intent to kill. Joints, head, bone-breaking strikes. This is Rex collecting on the debt from Beat 3 — the ice spike, the pecker line, the laughter aimed at him. Leo sees it from the deck but can't reach her in time. The protagonist has to choose: stay hidden and watch her die, or move and lose everything. + +**Beat 9 — Containment failure.** Quinn moves. Shatters the combat barrier the Academy built to contain Level Five power. Dismantles Rex's squad. Breaks Loop's concentration, frees Erin. Then the System fires without permission — evolution, threshold crossed, vampire nature fully awake. Vision shifts, arena cracks, air bends. The reversal is total and public and irreversible. Every student saw it. Leo recognizes something ancient. The secret isn't leaking anymore. It detonated. The resolution creates a crisis worse than everything before it — the protagonist got what the audience wanted and it might destroy him. + +**Beat 10 — CTA.** Questions mapped to the new threats, not the old mysteries. The school is hunting his secret. Leo saw something he recognizes. Erin will find out the bond was built on a lie. The convert question isn't "what powers does he get" — it's "what happens now that the thing he was hiding is the thing everyone saw." + +--- + +# IMF5 + +## *Core hook: Weak → Strong (or) Poor → Rich* + +**Beat 0 (optional) — Powerstart.** Pre-scene hook that loads the secret, the stakes, and the emotional texture before the story begins. Functions as a cold open — can be cut without breaking structure, but when it works, it's the 3-second play rate. + +**Beat 1 — Protagonist at zero.** The world's hierarchy is established through what it does to the protagonist, not through explanation. Empathy is built through injustice — the audience feels the system before they understand it. The protagonist's lack is visible to everyone. e.g. Quinn has no power in a world where power is everything, and the person closest to him leaves because of it. + +**Beat 2 — The Summons.** Something arrives that promises to change the protagonist's position — but the audience doesn't know in which direction. Could be salvation, could be worse. Curiosity replaces pure empathy as the retention driver. e.g. A military message pulls Quinn somewhere he doesn't belong, with no explanation. + +**Beat 3 — First Reversal (Private).** The protagonist enters a space that should reject them and instead gets recognized. But the reversal is seen only by gatekeepers, not by the people who matter. The audience gets a taste of vindication — enough to believe the turn is real, not enough to feel satisfied. e.g. Commander Miller goes from dismissive to deferential, but nobody from Quinn's life sees it. + +**Beat 4 — Reversal Sealed.** A secondary character tries to undo or challenge the reversal, and gets overruled. This confirms the reversal wasn't a fluke — but also re-locks it. The protagonist is told to keep it secret. The audience now holds information the world doesn't. e.g. Bridger accuses Quinn of theft, Miller forces her to apologize, then warns Quinn to tell no one. + +**Beat 5 — Injustice Reload.** The protagonist returns to the world that doesn't know what's changed. The same people who degraded them in Beat 1 degrade them again — but now the audience knows something they don't. Every insult lands differently because of the dramatic irony. A potential ally surfaces but the protagonist can't accept help yet. e.g. Jennifer and Troy destroy the phone, humiliate Quinn publicly. Layla defends him but he can't even afford dinner. + +**Beat 6 — Social Trap + Dramatic Irony Engine.** The protagonist is pulled into a social situation where their low status will be exposed again. Meanwhile, characters who don't know the protagonist trash-talk them in a parallel scene. The audience is watching two trains approach the same intersection. e.g. Suzan tries to cancel dinner because Quinn is powerless. Scarlet mocks the "loser from the armory" not knowing he's walking toward her table. + +**Beat 7 — Emotional Bottom + Activation Trigger.** The protagonist breaks. Not publicly — privately. The lowest moment is internal. Something physical happens in the breakdown that unknowingly triggers the mechanism of change. The audience watches the transformation begin without the protagonist realizing it. e.g. Quinn punches a mirror, bleeds on the book. The book reacts. He doesn't notice. + +**Beat 8 — Detonation / Cliffhanger.** External crisis and internal transformation collide simultaneously. The world breaks open (threat) and the protagonist's hidden potential activates (promise). Resolution is initiated but never delivered. The audience knows something massive just happened but not what it means. e.g. Dalki attack, the book pulses, "Activating the Vampire System." No explanation of what the system does. + +--- + +# PAWN SHOP + +## *Core hook: Hidden/Secret Identity (or) Weak → Strong (or) Poor → Rich* + +**Beat 0 (optional) — Cold open / Powerstart.** Narrator voice establishes the protagonist at rock bottom and promises a massive status reversal. Sets the emotional contract: you're about to watch a nobody become the most powerful person in the room. Functions as a trailer for the promo itself. + +**Beat 1 — The world prices the protagonist at zero.** Aiden is broke, about to be evicted, can't afford rent or a birthday gift. The lack is economic. The world doesn't hate him — it just doesn't register him. He exists below the threshold of mattering. + +**Beat 2 — A mystery object signals the protagonist is worth more than the world thinks.** The pawn shop scene. Aiden tries to sell the ring and gets a gun pulled on him. The shopkeeper's terror is the first evidence that the protagonist's perceived worthlessness is a lie. The audience knows something is hidden. The protagonist doesn't. + +**Beat 3 — Flashback anchors the mystery to a personal loss and plants a revenge target.** Father's murder. The ring's origin. The promise to remember the killer's face. This beat gives the mystery emotional stakes — the object isn't just valuable, it's connected to a trauma the protagonist needs to resolve. The scar is planted as a visual the audience will track. + +**Beat 4 — A personal antagonist humiliates the protagonist publicly, and the protagonist absorbs it.** Derek at the strip club. The humiliation is witnessed. The protagonist has the ability to fight back but can't afford the cost. The swallowed response builds audience pressure that needs release later. + +**Beat 5 — The protagonist's last source of stability betrays them.** Vanessa's birthday party. The girlfriend dumps him publicly for the antagonist. The one good thing in his life is taken, and the taking is performed as entertainment for an audience. Rock bottom. This is the lowest the protagonist will go before the reversal begins. + +**Beat 6 — A forced entanglement embeds the protagonist in a world above his station.** The Ava/Harvey marriage ultimatum. The protagonist is shoved into proximity with wealth and power he doesn't understand, for reasons that have nothing to do with who he actually is. This plants the love interest and a secondary antagonist (Shane) while positioning the protagonist inside the world he's about to inherit — before he knows it's his. + +**Beat 7 — The secret is revealed to the protagonist. The world inverts.** Cyrus recognizes the ring. Legacy reveal — billions, a mafia empire, all of it belongs to Aiden by birthright. In the same beat, the protagonist recognizes the scar in the photograph. The man who killed his father was his father's partner. The reversal and the revenge target arrive simultaneously. The protagonist chooses to hide what he knows. + +**Beat 8 — The protagonist earns validation through action, not inheritance.** Ben Jameson fight. The legacy was told to him in Beat 7 — this beat makes him prove it physically. Converts birthright into credibility. The audience now believes the protagonist can operate in this world, not just that he's entitled to. + +**Beat 9 — The protagonist's status rises while an external threat mobilizes against them.** New car, bank account, allies, a job. Intercut with Dominic Grayson learning the Tiger is back and ordering a kill. The rise and the danger are simultaneous — the audience gets satisfaction from the reversal while knowing it's already compromised. + +**Beat 10 — The protagonist discovers the people protecting him may be the actual threat.** Club Cain. Rachel with Dominic. Raymond alive. Everything the protagonist was told is now in question. The trust structure detonates. The promo ends with every alliance unreliable and a gun at the protagonist's head. The audience is pulled into the app not by action but by the need to know who was lying. + +--- + +# SUPERMARKET + +## *Core hook: Poor → Rich (or) Weak → Strong (or) Hidden/Secret Identity* + +**Beat 0 (optional) — Cold open / In medias res.** The protagonist is mid-crisis — shot, bleeding, glowing, holding a stolen gun while the love interest has a rifle to her head. Establishes the endpoint so the audience spends the entire promo anticipating the arrival. Everything that follows is "how did we get here." + +**Beat 1 — The world prices the protagonist at zero despite what they've earned.** Car showroom. The protagonist is a veteran — he's already paid a price the world should respect. It doesn't. The lack is economic, but the injustice is deeper: the gap between what he's given and what he gets back. The pendant pulses for the first time — a background signal nobody understands yet, including the protagonist. + +**Beat 2 — An external crisis creates a deadline the protagonist can't meet alone.** Mr. Lin is dying. A million dollars. Forty-seven dollars in his pocket. Then the anonymous payment — someone covered it, no name. The protagonist's world splits in two: the world he understood (where nobody helps people like him) and the world that just intervened (where someone powerful is watching). The mystery of who and why becomes the second engine alongside the injustice. + +**Beat 3 — A powerful stranger offers a deal the protagonist can't refuse because someone else's life depends on it.** Robert Hart. The benefactor who paid. The offer: work for me, follow orders, become a millionaire. No job description. The protagonist's freedom is exchanged for his mentor's survival. From this point forward, every humiliation the protagonist endures is load-bearing — he's not just absorbing it, he's buying someone else's life with his dignity. + +**Beat 4 — The mentor warns the protagonist and deepens the supernatural mystery.** Mr. Lin in the hospital. Trained Brian, warns him about the rich, tells him to trust the pendant. The pendant glows visibly for the first time. The mentor knows more than he's revealing. This beat establishes that the protagonist has been prepared for something specific — and the preparation predates the job offer. + +**Beat 5 — The assignment is revealed to be beneath the protagonist, and the cost of failure is restated.** Hart estate. The million-dollar job is babysitting a college student undercover. Three predecessors failed. The gap between what the protagonist is (a combat veteran with supernatural potential) and what he's being asked to do (carry bags, attend classes) creates comic tension — but underneath it, the stakes are lethal. If the girl rejects him, the deal is off, and Mr. Lin dies. + +**Beat 6 — The love interest rejects the protagonist on sight, and the protagonist cannot retaliate.** Stella's entrance. She treats him like trash. One day. The structural trap: every previous humiliation (salesman, showroom) the protagonist could have walked away from. This one he can't. His pride is the currency and someone else's life is the price. The audience feels the compression — the protagonist is squeezed between contempt from above and mortality from below. + +**Beat 7 — The protagonist demonstrates lethal competence in a social setting, and the love interest witnesses it.** Party. Peter Kingston. Three bodies in three seconds, then a knife disarm. This beat releases the accumulated pressure from Beats 1–6. The protagonist's real capability becomes visible for the first time — not to the world, but to the specific person whose opinion determines whether he keeps the job. The love interest's involuntary physical response (grabbing the rope, elevated pulse) signals the beginning of a shift she hasn't consciously acknowledged. + +**Beat 8 — The protagonist earns trust through vulnerability, not force.** The noodles. The fight proved competence. This beat proves humanity. The love interest's defenses crack not because the protagonist overpowered them but because he revealed something gentle. She grants access she'd been withholding — permission to accompany her to the bank. The audience understands this is the beat that puts everyone inside the building from the cold open. + +**Beat 9 — The supernatural system issues a warning the protagonist can't act on because the love interest overrides him.** Pendant convulses. Brian tries to stop them. Stella refuses. The pendant goes cold. The protagonist knows something is wrong and is powerless to prevent it because the power structure of the relationship (she gives orders, he follows) hasn't caught up to the reality (he's the one who can sense danger). The audience watches them walk into the trap knowing it's a trap. + +**Beat 10 — The threat reveals itself as targeted, not random.** Bank robbery. Military formation. But the leader bypasses every other hostage and goes straight for the love interest. This isn't a robbery — it's a kidnapping. The audience's question shifts from survival to conspiracy: who sent them and why. + +**Beat 11 — The protagonist sacrifices his body to protect the love interest, and the sacrifice activates the supernatural system.** Brian calculates the trajectory, shifts into the bullet, takes the round. The pendant detonates. Full activation — he can see heartbeats, weapons through fabric, exit paths, structural weaknesses. He steals the leader's backup pistol without being detected. The sacrifice is the trigger. The system doesn't activate because of danger — it activates because the protagonist chose to absorb harm for someone else. The audience now understands the pendant's rule: it responds to selflessness under duress. + +**Beat 12 — Resolution is withheld at the moment of maximum tension.** Brian rises. Fires. Hits one gunman. The leader has a rifle to Stella's head. Brian doesn't drop the gun. Freeze. The promo answers what Brian is but never answers whether he can save her, who sent the men, or what the pendant actually is. Three open questions, all requiring the app. + +--- + +# FITP + +## *Core hook: Underdog Awakening + Secret Identity* + +**Beat 0 (optional) — Powerstart.** Voice-driven self-introduction. The protagonist narrates her own confinement with dark humor — she describes horror as normal, which tells the audience more about the world than any exposition could. The tone IS the hook. No event, no action — just a voice that treats a dungeon cell like a dorm room. + +**Beat 1 — The Ritual.** The authority figure enacts violence on the protagonist. Not a one-off — a routine. The protagonist already knows the steps. She's on her feet waiting before he arrives. The violence escalates through stages, each worse than the last, and the protagonist's internal monologue stays calm through most of it because she's done this before. Empathy is built through normalization — the audience is horrified by what the protagonist treats as ordinary. + +**Beat 2 — Care Contrast + Origin Void.** The protagonist wakes in institutional care and immediately tries to escape — kindness is so foreign she interprets help as threat. The caretaker catalogs her injuries clinically, asks who did this, and she can't answer because disclosure is more dangerous than the injuries. Then a simple question she can't answer — her own birthday — opens the backstory: no family, no history, no identity beyond what strangers assigned her. Empathy deepens through absence, not event. + +**Beat 3 — Transformation Discovered.** The caretaker warns the protagonist she "looks different" but won't explain. A staff member stares and looks away when caught. The protagonist finally sees herself — one eye has changed to an impossible color. The change accelerates (both eyes, hair). The mystery is physical, undeniable, and unexplained. Curiosity activates alongside empathy: "what is she becoming?" + +**Beat 4 — False Reprieve.** The protagonist returns to her space to find it completely transformed — someone upgraded everything while she was gone. She's overwhelmed by things the audience takes for granted. A caretaker gives her items to hide the transformation. Functions as a hope beat — the protagonist experiences basic human decency for the first time. Structurally, its job is to give her something to lose. + +**Beat 5 — Hope Destroyed.** The authority figure finds the upgrades and weaponizes them as debt. Strips the protagonist's last freedom. Declares her a permanent servant with no path out and no way to repay. The kindness someone showed her has been turned into a chain. The protagonist narrates the flame of hope extinguishing. + +**Beat 6 — Cruelty Delegated + First Manifestation.** The authority figure orders his son to punish the protagonist, then leaves. The abuse is becoming institutional — passed down generationally. The protagonist breaks down completely, begs a higher power. At the moment of maximum despair, the impossible happens — time stops, her hands glow, she burns the attacker without understanding how. He's terrified. He runs. The manifestation is confusing, not triumphant. The audience's reaction is "wait, what?" not satisfaction. + +**Beat 7 — The Secret Named.** That night, an inner voice awakens and identifies itself. It names what the protagonist is: not a slave, not a servant, but something far greater. The protagonist doesn't believe it. Functions as the central promise planted in a way the protagonist's skepticism protects from resolving. The audience wants to believe it. The protagonist can't afford to. + +**Beat 8 — Injustice Compression.** Weeks pass in summary. Conditions worsen — more work, more abuse, more isolation. The inner voice is the protagonist's only refuge. They bond over the one task the protagonist is allowed to do. Functions as an injustice accumulator — the audience's need for reversal compounds across every compressed detail. Also establishes that the power hasn't changed her daily reality. She's still trapped. + +**Beat 9 — Witness to a Secret.** The protagonist accidentally sees something a powerful figure was hiding — a transgression that could destroy reputations. She wasn't supposed to be there. Functions as a new threat vector that has nothing to do with her own secret. The threat map expands — now another person has reason to silence her. + +**Beat 10 — Attacked for Knowing + Second Manifestation.** The figure whose secret she witnessed attacks her to ensure silence. The inner voice takes over the protagonist's body — voice changes, hands glow, burns the attacker. More controlled than the first manifestation, includes a verbal threat. Functions as the second awakening fragment while raising the secret identity stakes — another person now knows she's not what she appears. + +**Beat 11 — New Axis of Horror.** The authority figure's son corners the protagonist and reveals his interest isn't just cruelty — it's sexual. He's been aroused by watching the abuse. He describes what he intends. Then follows through. The protagonist dissociates. The narration goes flat. The inner voice can't intervene because the attacker outranks them in the hierarchy. Functions as the absolute floor of the story — there is nowhere lower to go. + +**Beat 12 — Survival Tether.** The inner voice orders the protagonist to get up. The protagonist says she wants to die — and means it. She goes to the edge of the building repeatedly. Can't do it — not for herself, but because ending her life would end the inner voice's life too. The bond with the voice is the only thing holding. Functions as an empathy ceiling — the audience understands this is not drama, it's a genuine reckoning. + +**Beat 13 — Defiance Flicker.** Another powerful figure threatens the protagonist. For the first time, the protagonist pushes back — not with power, but with truth. She removes her disguise, shows her changed eyes, and says she'd welcome whatever they do. Functions as a character turn: she's stopped hiding because she's stopped caring whether she survives. The secret identity cracks from exhaustion, not strength. + +**Beat 14 — World Expansion.** The authority figure assigns the protagonist to serve a visiting delegation from the most powerful neighboring pack. Political stakes enter for the first time. The protagonist's world, which has been a closed system of abuse, suddenly opens. Functions as pre-positioning — the person who will change everything is being brought to her by the very system that's destroying her. + +**Beat 15 — New Eyes on the System.** The delegation arrives. They're physically intimidating but polite — the contrast with the protagonist's own people is immediate. A senior outsider notices the protagonist's disguise, asks what she's hiding. Sees the hair, the eyes, the bruises. Warns her to cover the injuries before their Alpha sees them. Functions as the first time an outside observer registers that something is deeply wrong here. + +**Beat 16 — Punished During Performance.** The authority figure punishes the protagonist for minor failures in serving the guests. Her healing can't keep up. She's serving the delegation while bleeding through her clothes. Functions to keep the injustice thread alive during the world-expansion sequence — the audience can't forget what she's enduring even as the story widens. + +**Beat 17 — Pride in Creation.** The protagonist prepares an elaborate formal meal for the delegation and feels pride for the first time. Her inner voice helped her find joy in the one task she's allowed to do, and now that investment pays off emotionally. An outsider acknowledges her work. Functions as an earned emotional beat — the protagonist experiences a feeling she's never had, built from the only freedom the system accidentally left her. + +**Beat 18 — Calm Before Storm.** Late at night, the protagonist restocks guest rooms alone. She leaves personal touches — things she remembered individual guests requesting. She's humming. She's calm. Functions as the last breath before the climax. The audience feels the stillness. + +**Beat 19 — Mate Reveal.** The protagonist approaches the last door. A guard challenges her. She looks up. The most powerful person in the visiting delegation is standing in front of her. They recognize each other at the same instant — the bond activates simultaneously. He crosses the distance and pins her to the door. The inner voice screams confirmation. The structural answer to every beat of accumulated injustice is standing right in front of her. But it's INITIATED, not delivered. They meet. That's all. + +**Beat 20 — Collision / Cliffhanger.** His force reopens every unhealed wound. Blood runs down. Her abusers arrive in the hallway — every power structure in the story collides in one corridor. The visiting Alpha attacks anyone who reaches for her. The affair secret detonates. Everyone is screaming. The protagonist is fading, can't hear anything. She grips his arm. Whispers "help." Slides down. Cut. Resolution initiated. Resolution withheld. The audience knows what the bond means — rescue, exposure, reversal. They get none of it. + +--- + +# DRAGON BATTLE + +## *Core hook: Loyalty / Sacrifice* + +**Beat 1 — Protagonist at zero.** World hierarchy established through what it does to them. The thing the world dismisses as weakness is quietly framed as the thing to watch. Rita flicks his beasts over with one finger. Kruger's lion kicks dirt on him. Rich kids get rare beasts at birth — Karl's are a baby bird and a house spider. But the beasts speak to him telepathically: "You're special! That's why we chose you!" The audience holds two frames at once: the world says he's nothing, his beasts say he's chosen. + +**Beat 2 — Excluded from the arena.** The protagonist isn't just low status — they're barred from the one event that could change their position. The door closes before the story walks through it. The Beast Master Battle is tonight. Win and level up, lose and go home. Rita bans Karl from attending. The first in his family to leave the mines, and he can't even get in the room. + +**Beat 3 — External power tests the protagonist's values.** An authority offers a shortcut to power. The price is sacrificing something the protagonist is loyal to. They refuse. Punished for it. The authority silently registers the refusal as meaningful. Nadia offers her WilderBear to the weakest student — Karl could leap in status instantly, but he'd have to trade away one of his beasts. He refuses. Rita hits him. Kruger takes the bear, widening the gap. The twinkle in Nadia's eye isn't attraction. It's assessment. + +**Beat 4 — Emotional bottom as resignation.** Not rage, not breakdown — surrender. The protagonist stops believing they belong. The lowest point isn't external punishment — it's internal capitulation. Karl walks to the cup, writes his name on a card, hovers his hand over it — and crumples the paper. He agrees with the world's verdict on him. + +**Beat 5 — Accidental contact with the force that will eventually invert their status.** The protagonist stumbles into proximity with something far beyond their level. Survives through instinct and the bond with their allies. A mechanic gets planted that looks incidental. Neither the protagonist nor the force recognizes what just happened between them. Karl sneaks into the stables and walks into Scalix's cave. Nearly dies. Rae crawls across the dragon's face — Scalix flinches. They escape. The spider-on-the-dragon moment reads as comic relief. It's a loaded gun. + +**Beat 6 — Forced into the arena by antagonists.** The protagonist doesn't choose to compete — the antagonists rig it as humiliation. The summons is weaponized contempt. But the audience holds information the antagonists don't. Karl's name comes out of the cup — Kruger rigged it. The magical binding forces him to fight the Prince and his legendary dragon. But the audience knows Karl already survived face-to-face contact with Scalix. The antagonists think they're sending a lamb to slaughter. The audience isn't sure. + +**Beat 7 — Battle + the moral choice.** The protagonist is losing, finds an opening, but taking it means sacrificing the thing they refused to sacrifice in Beat 3. Same test, lethal stakes. They choose to lose. They shield their allies with their own body. Karl fights Scalix and the Prince. Gets crushed on points. Hawk draws blood — first crack. The spider trick works again, Karl has an opening. Hawk can attack while Rae is exposed on the dragon. He could win. But Rae might die. He runs into the circle, breaks the protective field, covers his beasts with his body. He chooses them over the win. + +**Beat 8 — The force from Beat 5 inverts their status because of the choice in Beat 7.** The reversal is total, public, and originates from outside the protagonist. The thing they were punished for in every previous beat is the thing that earns the highest reward in the world. Power comes to them because of who they are, not what they were hiding. Scalix refuses to attack. "NO." She breaks her bond with the Prince on live television and chooses Karl. "He chooses his beasts first." The dragon — the force Karl accidentally contacted in Beat 5 — recognizes the moral choice and inverts his position in front of everyone. + +**Beat 9 — The authority from Beat 3 returns with a question the inversion can't answer.** The status inversion shouldn't be possible given what everyone knows about the protagonist. The institutional power names the contradiction. Resolution initiated, identity mystery opened, payoff withheld. Karl is grabbed off the street. Bag over his head. It's Nadia. "A legendary dragon will only bond with royal blood. I know every member of my grandfather's family." She looks at him. "So what makes you so special?" The beat that tested his values now holds the key to his identity. + +**Beat 10 — CTA.** Questions mapped to the threads the inversion opened, not the ones it closed. + +--- + +# TRAGIC CHILDHOOD + +## *Core hook: Underdog / Weak → Strong (or) Poor → Rich* + +**Beat 0 (optional) — Powerstart.** A single, specific public humiliation. Not narrated — shown. The protagonist's most personal possession is displayed as a joke for the entire school. Functions as instant status placement: the audience knows exactly where this person sits in the hierarchy before a word of context is given. + +**Beat 1 — Protagonist at Zero.** The world's power hierarchy is established through a montage of cruelties — each from a different person, each in a different setting, all delivering the same message: the protagonist is nothing here. The world's currency is an innate trait he doesn't have. The insults are specific and physical, not abstract. Crucially, the one thing the protagonist IS exceptional at — academics — earns him public recognition that the room laughs at. Functions to close the "can't he just work harder?" escape valve immediately. He already did. The system doesn't care. Empathy is built through volume: this isn't one bully, it's the entire world. + +**Beat 2 — The Promise / The Mystery.** A bully weaponizes the protagonist's dead parent. The protagonist nearly breaks — ready to fight — but stops himself, because retaliation would destroy everything he's worked for. This triggers the backstory: flashback to the parent's death, a child holding a dying parent who gives two commands — never reveal the secret, become the chosen one. A sealed object is left behind that the protagonist can't open. Back in present day, the protagonist lives in squalor, studies obsessively, works menial jobs, and spends every remaining hour trying to unlock what the parent left behind. Functions to plant the central mystery (what's sealed inside?), the central constraint (the deathbed promise), and the reason the protagonist absorbs punishment instead of fighting back — all in one move. The audience now has two threads: empathy (how much more can he take?) and curiosity (what's in the object?). + +**Beat 3 — Hope Arrives and Corrodes.** Someone from the powerful class takes an unexpected interest in the protagonist. She's everything he isn't — status, lineage, the trait he lacks. A relationship forms. But the same gap that makes the protagonist a target starts eroding the relationship from inside. She wants things he can't provide. He values things she's losing patience for. The cracks form not from cruelty but from incompatibility that the world's hierarchy makes unfixable. Functions as a false reprieve that the audience can already see failing — the system doesn't just attack the protagonist directly, it poisons anything good he touches. + +**Beat 4 — No Sanctuary.** The bullying follows the protagonist to his job, his private spaces, the places he retreats to. The specific bully is the romantic rival — personal and persistent. The protagonist's sharp tongue earns him physical punishment. Even his workplaces become sites of humiliation. Functions to close every escape route. There is nowhere safe, and the rival's presence keeps the romantic threat active. + +**Beat 5 — Breaking Point.** The protagonist goes to his dead parent's grave and breaks down. He shouts at her. Accuses her. Questions the promise. Then feels guilt. Then begs for help. The rain falls. Functions as the emotional floor — the audience watches the protagonist's faith in the mission crack. He's not stoic; he's barely holding on. The audience feels the isolation: the only person he can talk to is dead. + +**Beat 6 — The Trap + Retaliation.** A powerful family offers the protagonist what he wants most — the trait everyone else has — with one condition: abandon the person he loves. He refuses. The offer was never real — it was designed to humiliate him or kill him. The powerful family retaliates through institutional channels: political connections, military authority, confiscation of savings, eviction. His poverty, which was already a burden, becomes a weapon used against him. The offer resurfaces with the same condition. He refuses again. Functions to test the protagonist's loyalty under maximum pressure AND escalate the threat from social to existential. The antagonist isn't just mocking the powerless — she can erase them. + +**Beat 7 — Everything Lost.** The person he loves leaves him. Not because she's cruel — because she's exhausted. She says what the world has been saying, but in the one voice that actually wounds him: you're not enough. The next morning, he's physically thrown out of his home. He sits on the street with his belongings and the sealed object, and considers abandoning everything — the mission, the promise, the object. Functions as rock bottom. The protagonist has lost the relationship, the home, the money, and the self-belief. The audience needs to feel that he is genuinely done before the turn arrives. + +**Beat 8 — The Vault.** An external trigger arrives at the last possible moment — a message about something the dead parent left behind that the protagonist didn't know existed, expiring today. He goes to the institution that holds it. Staff dismiss and disrespect him based on appearance. His identity is verified through the system, and attitudes flip instantly — a micro-status-inversion that foreshadows the macro one. The vault is nearly empty except for one object the protagonist immediately recognizes as the missing piece to the sealed object he's spent years trying to open. The parent hid the key separately from the lock. Functions as the mystery solving itself through inheritance at the last possible moment, and as the mechanical trigger for activation. + +**Beat 9 — Activation.** The key requires the protagonist's blood to work. The sealed object opens. He sees a vision of his parents' final moments — one parent sacrificed themselves so the other could escape with the object. Generations of stored power flow into the protagonist's body. A voice names him the chosen one. He collapses. When he wakes, he's in the same body with a completely different presence. He knows what he is. He heads straight for the place where every bully, every authority figure, and every person who dismissed him is gathered in one room. Functions as the awakening — but it's wrapped in grief (watching his parent die), not pure triumph. The audience gets the power-up and the cost simultaneously. The transformation is internal, not visual — same clothes, same appearance, different person. + +**Beat 10 — Status Inversion / Cliffhanger.** The protagonist arrives at the public event. Sees the person who left him holding hands with the rival. Gets mocked one final time by the antagonist who tells him to stay away from her powerful father. He smiles. Then he walks through the crowd, past the cameras, up the steps, straight toward the most powerful person in the room — the man whose family took his home, his money, and nearly his life. Security moves to intercept. The powerful man stops his own guards. Goes pale. Addresses the protagonist by name, with deference. The entire world is watching. Every humiliation from the first half of the promo is alive in the audience's memory as the kid everyone laughed at stands on stage and the most powerful man in the room is afraid of him. Resolution initiated — the inversion is visible, public, undeniable. Resolution withheld — the audience never sees what he does with it. Cut. + +--- + +# LIVE ACTION (2.0) + +## *Core hook: Underdog / Weak → Strong (or) Poor → Rich* + +**Beat 0 (optional) — Powerstart.** The protagonist approaches someone out of his league and gets physically destroyed for it. No buildup, no context — just a powerless person getting blasted across a hallway. The audience knows the hierarchy instantly. Quinn tries to ask Eliza for help and she launches him into a locker with her water power. "Do you even have an ability?" + +**Beat 1 — Protagonist at zero / the object.** The world's hierarchy is established through what it does to the protagonist, while a sealed object from his dead parents is established as the one thing that could change everything. The object is stolen by the top bully, and the protagonist chases it through a room full of powered students who use him as target practice. Even the teacher is hostile — tells him the enemy will kill him quickly, just like his parents. Quinn's ability book is taken by Rylie, flung into a live combat gym. Quinn charges through a battlefield of ice and lightning to get it back. Rylie smacks him in the face with his own book. The teacher tosses it back with a death prediction. The audience holds two frames: this kid is getting destroyed, but he won't stop chasing that book. + +**Beat 2 — The blood key.** Alone with a ticking clock, the protagonist desperately tries everything to open the sealed object. Nothing works. Frustration breaks him — he destroys something, cuts himself. His blood lands on the object and it glows. The key was inside him the whole time. Quinn has one hour before the military picks him up. He tries fire, impact, simulation of every element. Nothing. He hurls the book at a mirror, glass cuts his arms, blood drips onto the cover. Red glow. The mechanism is blood — the first hint that whatever this power is, it's not clean. + +**Beat 3 — Activation.** The sealed object opens and something uploads into the protagonist — not a power he controls, but a system that controls itself. His body transforms physically. A quest appears that's almost absurdly mundane. The tone is confusion and dread, not triumph. Quinn's book explodes open, a digital interface floods his vision, puncture wounds appear on his neck. He's taller, muscular, different. "YOU HAVE BEEN GRANTED THE VAMPIRE SYSTEM." First quest: drink three water bottles. The audience's reaction is "what just happened to him?" not "hell yes." + +**Beat 4 — First cycle / first cost.** The protagonist completes the trivial quest and feels the reward — his body surges beyond his control. The progression loop is introduced: do the thing, get stronger. But immediately, the system reveals a fundamental weakness. Quinn chugs the water bottles, accidentally sprays his sergeant, and his legs carry him halfway down a hallway before he can stop. Then he steps into sunlight and everything drains. Stats halved. The power has a built-in cost the protagonist can't avoid. + +**Beat 5 — First brave act.** The protagonist sees the bully harassing someone and intervenes — not with power, but with nerve. It's the first time he's stood up to anyone. Before the confrontation can escalate, an external force knocks everyone unconscious. On the bus, Rylie is cornering Layla. Quinn steps between them. "I thought you had a girlfriend?" Rylie is furious but green gas floods the bus before he can retaliate. Quinn's system tries to resist the fumes but he goes down too. He wakes up at the academy. + +**Beat 6 — New world / allies formed.** The protagonist arrives at the academy where everyone's power level will be permanently visible. He meets a fellow powerless cadet and completes a stealth quest no one notices. A bully attacks the new friend; the protagonist catches the punch — first real proof the system works. A powerful stranger intervenes and offers protection. Watches are snapped on — rank displayed for all to see. Quinn meets Peter, who hates the ranking system because he's powerless too. Quinn tricks Peter into pocketing a silver necklace (vampire weakness — quest complete, strength increases). Momo attacks Peter; Quinn catches his electrified fist mid-swing. Vorden steps in with the same lightning and shuts Momo down. Three allies, formed in minutes. + +**Beat 7 — Power ceiling.** Other cadets are tested against holographic enemies. The audience sees what real power looks like at this level — and learns that falling below a threshold means expulsion within thirty days. The protagonist hasn't been tested yet. Layla's telekinetic arrows hit three targets simultaneously. Erin sprouts ice wings and shreds a dozen enemies at once. Layla scores a two — needs a three in thirty days or she's out. The bar the protagonist has to clear is now visible and terrifying. + +**Beat 8 — The test / dark power.** The protagonist is forced to test despite being "powerless." He needs to complete a quest mid-combat but the mechanism is absurd and humiliating. He fails, gets overwhelmed, is saved by an ally. The quest accidentally completes. Dark power floods in. He goes on a rampage and enjoys it too much. Quinn has to pull Vorden's hair during a Dalki fight. He grabs Vorden's entire scalp — nothing. Gets piled on by three Dalki. Vorden saves him with ice powers (copied from Erin — his secret). Quinn grabs Vorden's forearm to stand up, snagging a tiny hair. Quest complete. Shadow blades appear at his fingertips. He carves through Dalki laughing, splattered in holographic blood, until Vorden physically stops him. Level one. The audience saw what happened. So did every cadet in the crowd. + +**Beat 9 — Party / blood trail.** The system guides the protagonist somewhere social with no explanation. The romantic interest finds him and chooses him openly. Then a new ability activates — he can see trails leading to blood. He follows one and finds his powerless friend being beaten by the bully. The system recommended the party. Layla bumps into Quinn, tells him she wants to train together. Rylie glares from across the room. Then a red trail bleeds into Quinn's vision, leading to the back — Rylie has Peter by the collar, punching him. Quinn steps into the circle. + +**Beat 10 — Final fight / full unlock / cliffhanger.** The protagonist fights the bully. He's losing — the bully is stronger. But the system adapts in real-time, building immunity to the bully's signature attack. The protagonist endures the pain until the immunity kicks in, draws blood, and faces the final quest: consume it. He hesitates — every quest has been darker than the last. He looks at his friends, looks at the blood, and chooses. Full transformation. Quinn bear-hugs Rylie through his own flames until the system grants temporary fire immunity. He cracks Rylie's nose. Blood on his knuckles. "CONSUME TO COMPLETE QUEST AND FULLY UNLOCK SYSTEM." Rylie powers up with a beast weapon. Quinn looks at the blood, thinks about everything the system has asked him to do — destroy silver, steal hair, track blood. He licks it. Shadow wings erupt from his back, claws extend, fangs sharpen, eyes burn red. He rises off the ground. The kid they called Level Zero floats above the room. "Ready to find out what Level I really am." The audience never sees the fight finish. Cut. + +--- + +# PHOENIX / LOVE BITE + +## *Core hook: Secret Identity / Reincarnation* + +**Beat 1 — Public Sentencing.** A hostile authority assembles their entire household to mock the protagonist and pronounce a "merciful" choice that is actually a death sentence. The crowd laughs because everyone in this world already knows what the choice means. The protagonist accepts — not because the option is real, but because refusing means immediate execution. Hierarchy is established through the assembled laughter, not through narration. e.g. Adrian sentences Serena to Lava Valley or hanging; the assembled house laughs at the magicless girl going to the heat that kills magicless people. The Mistress offers Tristan bite-or-die in front of forty howling werewolves who already know what conversion does to humans. + +**Beat 2 — The Hidden Identity Engages.** Inside the body the world is sentencing, a different identity is already active that no one can see. The audience learns who is *actually* wearing the disguise. The promise of the show is set: every cruelty going forward is being absorbed by someone the world has fundamentally misclassified. e.g. Serena is a Thief Goddess in a thirteen-year-old's body; Tristan is the world's first Zompirewolf in the cell where they expect to find a half-dead pawn. + +**Beat 3 — The Hidden Mentor Surfaces.** Alone for the first time, the protagonist is contacted by a voice bound to their body — a sentient agent, not a passive system. The mentor names what the protagonist is, sets the hard rules of the power economy (level via X, hide via Y, die if Z), and offers a deal. The audience now holds a system the world doesn't see, and a contract whose price is deferred. e.g. Lucien materializes in Serena's palm, demands thirty thousand demonic cores in exchange for breaking the seven seals; Julian's voice cuts in mid-collapse, names Tristan a Zompirewolf, sets the gene-balance rule and the hide-or-die constraint. + +**Beat 4 — First Hidden Power Earned (Private).** The protagonist accesses the first fraction of their true power through a secret action — a theft, a private endurance, an unauthorized activation. The world doesn't see it. The audience does. Vindication is real but unshared, which prevents the satisfaction from leaking out of the audience and into the world. e.g. Serena steals the House Phoenix crest from her grandfather's chambers, breaks the first seal, conjures a flame in her palm and weeps. Tristan's first system reveal in the cell — "Designation: Zompirewolf. Grade F." — earned by surviving a bite that should have killed him. + +**Beat 5 — The Antagonist's Larger War.** The dominant antagonist's personal agenda surfaces — through a monologue, an overheard conversation, or a forced confession. The protagonist learns the captivity isn't incidental: they're being held as a piece in someone else's war against their own world. Cover deepens. Stakes shift from "survive today" to "play along while planning." e.g. Serena overhears Adrian and her uncle arguing — her parents' magic was sealed deliberately, Lava Valley was supposed to "handle what we won't." Mistress reveals to Tristan she's a bastard daughter planning to kill the Lycan King and use Tristan as her weapon. + +**Beat 6 — Second-Tier Cruelty Earns First Public Skill.** A lower-ranked antagonist tortures or tests the protagonist. The protagonist endures or counters, and the system rewards the endurance with a skill the world *can* see. The progression is small enough that the top antagonist doesn't fully reassess — but it's the protagonist's first publicly visible upgrade. e.g. Clara torches Serena's room; Serena's spark trips Clara into her own fire — first public proof of magic. Donovan grinds Tristan into glass shards in the training yard; he doesn't scream and earns Pain Tolerance Level 1. + +**Beat 7 — Top Antagonist Registers an Anomaly.** The dominant antagonist witnesses something they cannot explain — survives what shouldn't be survivable, performs what shouldn't be possible. They scan, suspect, or examine. The cover holds, but they've now looked closely. The audience is handed a clock: the secret has a finite shelf life. e.g. Clara runs to tell the family Serena has magic. Mistress storms into the simulation room, finds the real ghoul Tristan killed, slaps Donovan, and looks at Tristan with new eyes that don't quite find what they're searching for. + +**Beat 8 — Private Warning + Decision to Risk.** Back alone, the mentor warns the protagonist that the antagonist saw something. Leveling at the safe rate will not be fast enough. The protagonist breaks a rule — slips off the path, sneaks out, pursues a target above their level. The audience knows it's too soon. The protagonist knows too. They go anyway. e.g. Lucien senses a demon beast half a mile east; Serena slips off the Lava Valley path. Julian warns about the Mistress's all-seeing ability; Tristan decides one trait per day is too slow and goes out into Maddencreek to feed his vampire and zombie genes. + +**Beat 9 — Forced Activation Against Superior Enemies.** Out in the dangerous space, the protagonist is overpowered. At the moment of imminent death, the mentor forces a desperate activation of hidden power — and the activation comes with a hard constraint shown in the same beat (time limit, last resource, single-use cost). The protagonist kills enemies above their level. The world has no record this should be possible. e.g. Serena fights the demon beast head-on, kills it with a jagged rock, claims the core. Treaty vampires pin Tristan against a wall; Julian forces all three genes active at once — Undead Rhapsody, two minutes only — and Tristan ashes both vampires. + +**Beat 10 — The Fake-Friendly Betrayal.** A character who appeared to be helping is revealed as the trap-setter — or a previously hinted betrayal completes its detonation. The protagonist's trust map collapses by one major node. The kill counter visibly extends. e.g. Alaric, the cousin who gave Serena armor, walks in on her ambush and reveals he was the setup all along; the twins shatter her armor and leave her to die. The Mistress whispers mid-bite that Wyatt — Tristan's father's best friend — sold him out for a captain's rank, the same Wyatt who sold Tristan's parents four years ago. + +**Beat 11 — Threshold Confrontation / Cover Holds.** The top antagonist intercepts the protagonist at the moment of empowerment. They demand proof — read the doctored display, scan the body, look the protagonist in the face. The cover holds because the mentor's hack is good, but the antagonist has now looked at close range. e.g. Mistress in the corridor reads Tristan's status plate — Werewolf Level 2, Pain Tolerance, Battle Tactics — and finds nothing else. Serena kneels in the Aerie among the cousins who just left her to die; they pale at the sight of her but the sage is already chanting. + +**Beat 12 — Elevation Disguised as Trap / Cliffhanger.** The antagonist sends the protagonist into the one situation where their secret cannot survive — packaged as a reward, an honor, or an inevitable rite the protagonist cannot refuse. The mentor reveals a second unseen player whose hand the antagonist doesn't fully control. The protagonist is becoming the thing the world has never seen, walking into the place built to identify it. Resolution initiated, payoff withheld, multiple threads open. e.g. Mistress announces Tristan will attend Blackmoon Academy — "the worst place in this kingdom for what you are" — and Julian admits someone else wanted him there. The Phoenix egg cracks in front of Serena while the sage warns one of the four will discover what's hiding inside her. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/functional_skeletons_scene_groupings_v1.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/functional_skeletons_scene_groupings_v1.md new file mode 100644 index 0000000..5b30f4f --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/functional_skeletons_scene_groupings_v1.md @@ -0,0 +1,71 @@ +# FUNCTIONAL SKELETONS — SCENE GROUPING BLOCKS v1 + +**Companion to the functional skeleton library (`Functional Skeletons · Three Pillars`).** W2 v2's Scene Assembly stage reads these in inheritance mode: the grouping is inherited, not invented. Each block was derived once — from the source cracked script where full text or beat maps exist (Weapons, IMF5, Dragon Battle, Live Action 2.0 verified against `Cracked_Scripts_SceneBreakdown_v1.md`), from the skeleton's own beat logic otherwise (marked *derived — verify on first use*). Beat numbers reference the library's beat definitions. + +**Norms (from the six cracked scripts):** 5–7 scenes standard; long-form skeletons (FITP, Phoenix/Love Bite, Pawn Shop) run 8–9. One ANCHOR scene at 25–35% of script length. Connective scenes legal but ≤~250 words and must still turn a state. Every scene break carries a NAMED-NEXT on-page. + +--- + +## WEAPONS / DRAFT SELECTION *(validated: MVS Weapons)* +- S1 · **Courtyard / draft floor** · B1–B3 — zero → punished reversal → love-interest redirect +- S2 · **Institutional address + scanner** · B4–B5 — stakes go lethal; near-reveal +- S3 · **The bond** · B6 — ally bond on false foundation (S budget) +- S4 · **Arena, phase one** · B7 — reversal earned, then stolen +- S5 · **Phase two** · B8–B9 — ally dying → containment failure ⚑ **ANCHOR** +- B10 CTA +- **PROPULSION SPINE:** EVENT PROGRAM (selection → duels → phase two) + rising detection risk as escalation +- **NAMED-NEXT positions:** S1 in-dialogue ("Weapon Selection starts in 10 minutes") · S2 the phase structure announced · S4 the accusation left live → S5 + +## IMF5 *(validated: IMF5)* +- S1 · **The world at zero** · B1 +- S2 · **The summons → base** · B2–B4 — private reversal, sealed +- S3 · **Injustice reload** · B5 — same tormentors, new dramatic irony +- S4 · **The social trap** · B6 — intercut counts as one scene unit +- S5 · **Bottom → detonation** · B7–B8 ⚑ **ANCHOR** +- **PROPULSION SPINE:** CLOCK (the return/reveal tension carried by the secret's shelf life); WHY-NOW event schedules S2/S4 +- **NAMED-NEXT:** the summons (S1→S2) · the return order + secrecy warning (S2→S3) · the dinner invitation (S3→S4) + +## PAWN SHOP *(long-form; derived — verify on first use)* +- Nearly beat-per-scene: S1 apartment (B1) · S2 pawn shop (B2) · S3 flashback (B3 — keep ≤1 scene, it is the mystery anchor not a detour) · S4 club humiliation (B4) · S5 birthday betrayal (B5) · S6 marriage ultimatum (B6) · S7 the reveal (B7) ⚑ **ANCHOR** · S8 validation fight (B8) · S9 rise/threat intercut (B9) · S10 Club Cain trust-collapse (B10) +- **PROPULSION SPINE:** CLOCK (eviction/economic clock) handing off to the revenge-target mystery at S3 +- **NAMED-NEXT:** each beat's closing hook names the next social arena (the party, the meeting, the club) + +## SUPERMARKET *(derived — verify on first use)* +- S1 · showroom pricing (B0–B1) · S2 the dying mentor + anonymous payment (B2) · S3 Hart's deal (B3) · S4 hospital warning (B4) · S5 estate assignment (B5–B6) · S6 the party (B7) · S7 the noodles (B8 — BREATH scene, small) · S8 the bank (B9–B12) ⚑ **ANCHOR** +- **PROPULSION SPINE:** CLOCK (Mr. Lin's survival tied to the job; "one day" ultimatum), converting to the cold-open's promised bank crisis +- **NAMED-NEXT:** the job offer (S2→S3) · the assignment (S4→S5) · the party invitation (S5→S6) · the bank trip granted (S7→S8) + +## FITP *(long-form; derived — verify on first use)* +- S1 · cell / the ritual (B0–B1) · S2 institutional care (B2) · S3 transformation discovered (B3) · S4 reprieve → hope destroyed (B4–B5) · S5 first manifestation (B6–B7) · S6 injustice compression + witness (B8–B9) · S7 attacked / second manifestation → the floor (B10–B12) · S8 defiance + delegation arc (B13–B18) · S9 mate reveal → collision (B19–B20) ⚑ **ANCHOR** +- **PROPULSION SPINE:** CLOCK (the delegation's arrival, once announced) over a survival baseline; early scenes run on the ritual's routine as program +- **NAMED-NEXT:** the delegation assignment (S8's engine, announced at B14) is the load-bearing one + +## DRAGON BATTLE *(validated: FLBM Dragon Battle)* +- S1 · **Training yard** · B1 — zero + the beasts' counter-frame +- S2 · **Princess ceremony** · B2–B4 — exclusion, the offer, the refusal, resignation +- S3 · **Stables / dragon cavern** · B5 — accidental contact; the loaded gun +- S4 · **The arena** · B6–B8 — forced in → moral choice → inversion ⚑ **ANCHOR** +- S5 · **Street / the question** · B9 — "what makes you so special?" +- B10 CTA +- **PROPULSION SPINE:** EVENT PROGRAM (the Battle: tonight → draw → rounds) + escalating cost-of-loyalty as escalation +- **NAMED-NEXT:** the Battle announced at S1 · the ban makes the Battle forbidden (S2) · the draw forces it (S3→S4) + +## TRAGIC CHILDHOOD *(long-form; derived — verify on first use)* +- S1 · school humiliation (B0–B1) · S2 flashback + squalor (B2) · S3 the relationship (B3) · S4 no sanctuary (B4) · S5 the grave (B5) · S6 the trap + retaliation (B6) · S7 everything lost (B7) · S8 the vault (B8) · S9 activation (B9) · S10 the event inversion (B10) ⚑ **ANCHOR** +- **PROPULSION SPINE:** CLOCK (the vault expiry "today" ignites the endgame at S8; before that, the sealed object is the standing mystery) +- **NAMED-NEXT:** the expiring-vault message (S7→S8) · the gathering everyone attends (S9→S10) + +## LIVE ACTION 2.0 *(validated: MVS 2.0)* +- S1 · school / the object (B0–B1) · S2 the room: blood key → activation (B2–B3) · S3 first cycle → the bus (B4–B5) · S4 academy arrival / allies (B6) · S5 test arena (B7–B8) ⚑ **ANCHOR** · S6 party → final fight (B9–B10) +- **PROPULSION SPINE:** CLOCK (quest ladder on-screen + the one-hour pickup, then the 30-day expulsion bar) +- **NAMED-NEXT:** military pickup (S1→S3) · the academy assessment announced (S4→S5) · the system's party directive (S5→S6) +- **Standing caution (from the corpus):** this skeleton resolves its opening question at ~25–30% (the book opens) and paid −21 to −26 points of Q2 for it. Any inheritance must convert the question at S2 ("can he open it?" → "what is it making him?") with the successor live *before* the activation lands. + +## PHOENIX / LOVE BITE *(long-form; derived — verify on first use)* +- S1 · public sentencing (B1) · S2 the cell: identity + mentor (B2–B3) · S3 first hidden power (B4) · S4 the antagonist's war (B5) · S5 second-tier cruelty → public skill (B6–B7) · S6 warning + the risk decision (B8) · S7 forced activation in the open (B9) ⚑ **ANCHOR** · S8 betrayal + threshold confrontation (B10–B11) · S9 elevation-as-trap cliff (B12) +- **PROPULSION SPINE:** CLOCK (the mentor's power economy — level via X, die if Z — plus the antagonist's closing suspicion as a shelf-life clock) +- **NAMED-NEXT:** the mentor's deal terms schedule everything; the antagonist's "I'll be watching" beats hand each scene its threat + +--- + +*Maintenance: when a new promo cracks on any skeleton, re-verify its block against the shipped script and update. Derived blocks get verified on their first inheritance-mode use.* diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/hook_engine_library.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/hook_engine_library.md new file mode 100644 index 0000000..df104e7 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/hook_engine_library.md @@ -0,0 +1,345 @@ +# ============================================================ +# HOOK ENGINE LIBRARY +# STATUS: LIVING DOCUMENT — update as new engines are proven +# Each engine is defined by: core tension, beat logic, cliffhanger +# shape, performance data, and Impact Moment affinity. +# Add new engines ONLY after they are tested and show CPI performance. +# Structural rules (IM gates, parallel threads, BECAUSE chain, etc.) +# live in the workflow files (W1–W5) and CLAUDE.md. This file +# defines ENGINE-SPECIFIC applications. +# ============================================================ + +--- + +## ENGINE 1: SECRET IDENTITY (Threat of Exposure) + +### Core Tension +"They almost found out." + +### Beat Logic +- Protagonist has a hidden power/identity they cannot reveal. The power gap is extreme — secretly the strongest person in the room, treated as the weakest. +- Each beat is a **near-exposure event.** The secret almost surfaces — then the protagonist pulls back, absorbs punishment to stay hidden. +- Escalation on two axes: **(a) how close the secret gets to breaking** and **(b) who is watching when it almost breaks.** +- **Two simultaneous threat layers in EVERY beat: PHYSICAL DANGER + DETECTION DANGER.** If a beat only has one, it is underperforming. + +### The Central Question Contract +**"Why would someone this powerful take this?"** + +Planted in the first 30 seconds. NEVER resolves inside the promo. Each near-exposure raises the cost of discovery. The audience is pulled by inevitability — they know the secret will break, they need to see HOW. + +### Beat 1 Minimum Payload +Must deliver ALL in a single unbroken sequence: +- The secret established (what they're hiding) +- The cost of exposure established (what happens if caught) +- Physical danger present +- Detection danger present or implied +- Antagonist introduced or felt + +### Escalation Table + +| Position | Physical Danger | Detection Danger | Who's Watching | +|---|---|---|---| +| Hook | Bullied, attacked, humiliated | Power almost surfaces reflexively | Low-stakes witnesses | +| Early | Forced into test where hiding requires damage | Performs suspiciously well | Antagonist paying attention | +| Mid | Ally threatened — must act or let them suffer | Ally discovers secret (blast radius grows) | Detection-capable character enters | +| Late | Ambush — physically cornered | Multiple near-exposures rapid succession | Detection character in the room | +| Breaking Point | Will die if they don't use power | Using power means guaranteed exposure | The one person who must NEVER know is watching | + +### Dual-Layer Beat Test +- ✅ Both physical + detection present → engine running +- 🔶 Only one layer → add the missing layer or cut +- ❌ Neither → beat doesn't belong in this engine + +### Cliffhanger Shape +**Forced binary: survive OR stay hidden. Both catastrophic. No clean exit.** + +### ⚠️ Engine-Specific Risk: The Inversion Trap +If the protagonist hides too passively for too long, the audience loses respect. Fix: near-reveal every 2–3 beats, skill demonstrations that don't expose the secret, active concealment beats. + +### Why It Converts +- Instant hookability — no backstory needed +- Non-resolving question — protects Q2 retention +- Dual-layer tension prevents pacing plateaus +- Audience superiority position (dramatic irony) + +### Performance Data +- **MVS Weapons (Quinn):** $4.22 CPI, 30% CTI, Q2: 86.49%, Q4: 84.88%. STATUS: PROVEN. +- **Retention note:** Flattest retention curve tested. + +### Best Used When +- Protagonist starts with power already present +- World has a detection system +- Specific person who must never discover the secret +- Reason to hide beyond self-preservation +- Secret has a physical tell that gets harder to suppress + +### Best Combined With +- **Self-Sacrifice** — hides power AND sacrifices to protect someone +- **Temptation of Power** — secret power has corrupting influence + +### Impact Moment Affinity + +Naturally IM-dense when the central event is institutional (ceremony, trial, selection ritual). The "forced performance" structure means the protagonist must interact with world systems under pressure — each interaction is a potential IM. + +**IM risk:** If the central event is private (back-alley fight, prison cell), IM density drops sharply. The engine needs a PUBLIC, SYSTEM-RICH event container. + +**Natural IM types:** Status Inversion (near-reveals), Institutional Depth (event rules constraining protagonist), Power-Ceiling Reveal (other characters demonstrating scale). + +### NOT the Same As: Underdog Awakening +Different emotional contracts. Awakening asks "how strong can they get?" Secret Identity asks "how long can they keep hiding?" Secret Identity's central question is inherently non-resolving, giving it a structural retention advantage. + +--- + +## ENGINE 2: SELF-SACRIFICE / LOYALTY + +### Core Tension +"He chose the hard thing again." + +### Beat Logic +- Protagonist bonded to something the world says to abandon. The bond is visible, public, considered a weakness. +- Each beat offers an **easier exit.** The protagonist refuses every time — each refusal costs more. +- **The world REWARDS pragmatism.** Characters who take the easy path get ahead in real-time. +- Emotional anchor (WHY they sacrifice) planted in **first 60 seconds** through action. + +### The Central Question Contract +**"How much will they give up for this bond?"** + +Compounding structure — never resolves because costs keep escalating. + +### Beats 1–2 Minimum Payload +Across the first two beats, establish: +- Bond demonstration through action — the protagonist sacrifices for the bond object +- The tenderness moment — between punishment and sacrifice, a beat of care. This is the scroll-stopper. Do not skip it. +- Antagonist introduced or felt + +The offer/refusal, rival contrast, and quest launch can arrive in successive beats. The opening just needs to show: this person will sacrifice for this bond. + +### The Rival as Contrast, Not Villain +- Direct peer, not already elite +- Succeeds by taking the easier path +- If turns hostile, from rejection not malice +- Trajectory visible in every stage + +### Stakes Character as Character, Not Effect +- Physical behavior mandatory (moves, reacts, gestures) +- Reciprocal loyalty VISIBLE +- Emotional reactions to protagonist's state +- Test: audience wants to protect this creature within 10 seconds? + +### The Escalating Cost Principle + +The protagonist's first refusal should cost less than their final sacrifice. The stakes ladder applies to the offers themselves — each one demands more, and the protagonist pays more to refuse. + +**Dragon Battle example:** Karl turns down a WilderBear (material cost — stays weak). By the end, he shields his beasts from dragonfire with his own body (life cost — may die). The refusals escalate from "stays weak" to "may die." That's the engine working. + +### Anticipation Beat Shape +Recognition of worthiness — not a power demonstration. The specific thing sacrificed for produces the reward. Must be a PHYSICAL ACTION. + +### Cliffhanger Shape +Sacrifice pays off — but resolution WITHHELD. Validate the sacrifice + open a new world + withhold the full answer. Dominant emotion: HUNGER layered on JUSTICE. + +### ⚠️ Engine-Specific Risk: The Repetition Trap +Vary sacrifice TYPE (social → material → physical → existential). Vary WHO demands it. Insert action beats that TEST the bond. + +### Why It Converts +- Universal loyalty empathy +- Non-resolving question +- Clean moral forks +- Compounding investment +- Earned payoff + +### Performance Data +- **FLBM Dragon Battle (Karl):** $3.64 CPI, 23.86% CTI, Q2: 81.69%, Q3: 98.56%, Q4: 95.34%. STATUS: PROVEN. +- **WBT Rotting Boy (Ren):** Script 1: 19% CTI. Script 2: 12% CTI. Same beat sheet — execution difference (IM space). STATUS: PROVEN (execution-sensitive). +- **Retention note:** Strongest Q2→Q3→Q4 curve tested. + +### Best Used When +- Visible bond others consider a weakness +- Bond object chose the protagonist +- Environment punishes loyalty, rewards self-interest +- Public arena or competition +- Bond object has hidden potential + +### Best Combined With +- **Underdog Awakening** — loyalty unlocks progression +- **Secret Identity** — sacrifices to protect + must hide why capable +- **Countdown / Ticking Clock** — refusals burn time + +### Impact Moment Affinity + +Generates IMs through the bond object and the world's system of value. The beast/creature/companion IS the IM delivery vehicle — every new behavior, ability, or display expands what's possible. + +**IM risk:** If the bond object is passive or behaviorally flat, IM density suffers. The bond object must DO surprising things. + +**Natural IM types:** System/Artifact Discovery (bond object's hidden potential), Institutional Depth (academy ranking/ceremonies), Status Inversion (the "weak" bond object does the impossible), Power-Ceiling Reveal (rival demonstrates scale). + +**Critical lesson (WBT Rotting Boy):** Two scripts from the same beat sheet produced a 7-point CTI gap (19% vs 12%). Same IM events. Difference was execution — Script 1 let moments unfold through discovery (silence before, space after). Script 2 narrated moments from above (announced significance, explained mechanics, described emotions). IM quality depends on SPACE around the moment. + +### NOT the Same As: Revenge / Justice Denied +Opposite emotional contracts. Revenge: "will they get even?" Self-Sacrifice: "will their loyalty be rewarded?" + +--- + +## ENGINE 3: UNDERDOG AWAKENING / PROGRESSION + +### Core Tension +"He was nothing — now he's becoming something. But what is it turning him into?" + +### Beat Logic +- Protagonist starts at absolute zero. Humiliation is public, specific, physical. +- A hidden system activates. Demands tasks. Each reward reveals darker implications. +- **The progression loop IS the engine.** Each cycle: mini-cliffhanger → payoff. Dopamine every 2–3 minutes. Macro tension keeps climbing. +- Antagonist is a personal bully with persistent physical presence. +- Each power-up must cost something visible. +- Progression loop must never go dormant for more than 60–90 seconds. + +### The Central Question Contract +**"What is this system turning him into?"** + +### Beat 1 Minimum Payload +Must deliver ALL: +- Protagonist at absolute zero (public, specific humiliation) +- Antagonist present and personal +- The system hinted or activated +- A cost established (what the protagonist risks by engaging) + +### Escalation Logic + +| Track | What Escalates | Audience Feeling | +|-------|---------------|-----------------| +| **Power Track** | Rewards bigger, flashier, more dangerous | Exhilaration | +| **Cost Track** | Tasks darker, more morally ambiguous | Unease | + +Both must climb together. The sweet spot: cheering and nervous at the same time. + +### Cliffhanger Shape +System crosses a threshold — transformation begins but is NOT completed. The audience sees the BEGINNING of what the protagonist becomes, never the full picture. + +### ⚠️ Engine-Specific Risk: Tension Resolution at Activation +The moment power activates can feel like an ANSWER. If the audience feels satisfied, Q2 collapses. + +DATA: MVS Awakening Q2: 60.3% (question resolves). SW Smack Q2: 85.0% (activation delayed, made paradoxical). Dragon Battle Q2: 81.69% (never resolves). Delta between resolved and unresolved: 21–25 points. + +**PROVEN FIX (validated by SW Smack — $4.79 CPI, 17.61% CTI, 85% Q2):** + +Delay activation as long as structurally possible. When activation arrives, make it **confusing, taboo, or paradoxical — not triumphant.** The audience should feel "wait, WHAT?" not "hell yes." Triumph reads as resolution. Confusion reads as a new question. + +Specifically: +- **Delay:** Push first real power manifestation past the 40% mark. Fill pre-activation beats with injustice density and world-building IMs so the audience is invested before the system arrives. +- **Defamiliarize:** When power activates, make the mechanism strange enough that the audience's first reaction is curiosity, not satisfaction. SW Smack: kissing transfers power — the audience doesn't cheer, they lean in confused. +- **Complicate:** Activation should immediately create a social, moral, or physical problem the power doesn't solve. The power answers "can he fight back?" while opening "but at what cost?" or "but now what?" + +The earlier hypothetical fixes remain valid as additional options: +- Lead with a non-resolving hook question that survives activation +- Make activation catastrophic — the power itself creates a bigger problem +- Fragment the activation across multiple beats +- Layer a ticking clock or external pressure that the activation doesn't solve + +Any combination works. The test: after the protagonist gains power, does the audience have an URGENT reason to keep watching — or do they feel the contract has been fulfilled? + +### Performance Data +- **MVS Awakening (Quinn):** $3.41 CPI, 19.96% CTI, Q2: 60.3% ⚠️. STATUS: PROVEN (with Q2 risk). +- **Retention note:** Q2 bleed is structural — the opening question resolves. Q3/Q4 recover once the quest loop re-engages. +- **SW Smack (Ethan):** $4.79 CPI, 17.61% CTI, Q2: 85.0%, True Completion: 14.34%. STATUS: PROVEN. Delayed, paradoxical activation fixes Q2. Universal-emotion opening (romantic betrayal + powerless identity) drives 57.8% 3-sec play rate. Question-multiplier cliffhanger holds Q4 at 98.69%. +- **TSS Phoenix (Serena):** $3.40 CPI, 22.0% CTI, Q2: 82.0%, True Completion: 17.41%. STATUS: PROVEN. Domain-varied progression (5 distinct power domains) generates highest IM flavor variety in catalog. Question-multiplier cliffhanger holds Q4 at 99.12%. Combines Underdog Awakening with Revenge/Justice Denied elements. + +### Best Used When +- Protagonist at literal zero in a power-ranked world +- Progression system with visible milestones +- Power source has dark side or cost +- Persistent personal bully present before power arrives +- Larger forces would hunt protagonist if they knew + +### Best Combined With +- **Secret Identity** — awakens power but must hide it +- **Temptation of Power** — progression darkens past moral threshold +- **Self-Sacrifice** — gains power but uses it to protect someone weaker + +### Impact Moment Affinity + +Inherent IM potential through the quest-reward cycle. Each new ability is a potential System/Artifact IM. Risk: progression beats become MECHANICAL (stat increase) rather than WONDROUS (shadow blades growing from fingertips). + +**IM risk:** Numerical rewards (+5 strength, level up) don't pass the sticky test. Rewards must be VISIBLE, PHYSICAL, and SURPRISING. Vulnerable to IM deserts in the mid-section where quest-completion beats are mechanically interesting but don't expand the world. + +**Natural IM types:** System/Artifact Discovery (each ability as system reveal — but only if physically surprising), Status Inversion (powerless kid manifests something impossible), Power-Ceiling Reveal (system hints at endgame), Institutional Depth (if awakening happens inside a formal event). + +### NOT the Same As: Temptation of Power +Opposite starting points. Awakening starts from zero (exhilaration that darkens). Temptation starts with power (moral dread from Beat 1). + +--- + +## MERGE FORMAT + +A merge splices two proven promo structures into one script. The opening section uses one proven structure's shape; the main body uses another. This is distinct from adaptation (same structure, different show) and BSV (same structure, same show, different angle). + +**Proof case:** MVS Level Vampire + Weapons — $3.03 CPI, 26.13% Thruplay, 20.8% CTI. Opens with Level Zero's book-opening compression (protagonist at absolute zero, system activation, early quest loop), then transitions into the Weapons framework (tournament container, escalating combat, bond-driven sacrifice, secret identity reveal). + +### When to Use +- A show has two proven promos with different structural strengths, and neither alone is optimal for a new audience segment. +- The opening of one structure solves a known weakness in the other (e.g., Level Zero's immediate system hook compensates for Weapons' slower build). +- The show's world is deep enough that a longer promo (merge formats tend to run long) doesn't exhaust source material. + +### Structural Risks +1. **Dual resolution points.** Each original structure has its own resolution shape. The splice point often creates a mid-promo resolution that bleeds Q2. Level Vampire Q2: 75.0% — lower than either parent structure's best. Mitigation: treat the splice point as a BECAUSE link, not a scene break. The opening structure's cliffhanger must CAUSE the main structure's inciting event. +2. **Pacing valley at splice.** The transition from one structure to another can feel like a restart. The audience signed up for one story and gets handed a different one. Mitigation: carry at least one unresolved thread from the opening structure across the splice — a character, a question, a threat. +3. **Q4 resolution leakage.** If the merge delivers both structures' payoffs, the cliffhanger resolves too much. Level Vampire Q4: 82.95% — worst tested Q4. The secret breaking and full power display delivered satisfaction, killing install urgency. Mitigation: the merge's cliffhanger must follow §5.13 (Resolution Withholding) using ONLY the main structure's payoff shape. The opening structure's threads remain fully unresolved. + +### Performance Data +- **MVS Level Vampire + Weapons:** $3.03 CPI, 20.8% CTI, 26.13% Thruplay. Q2: 75.0%, Q4: 82.95%. Opening structure: Level Zero. Main structure: Weapons. STATUS: PROVEN (with Q2 and Q4 risks from dual resolution). + +### Not the Same As +- **BSV** — same structure, same show, new angle. A BSV doesn't change the structural skeleton. +- **Adaptation** — same structure, different show. An adaptation transplants one skeleton whole. +- **Merge** — two different skeletons joined. The structural DNA changes at the splice point. + +--- + +## HYPOTHETICAL ENGINES (UNTESTED) + +Move to main section only after testing with performance data. + +### Countdown / Ticking Clock +- Core tension: "Time is running out and every move costs something." +- Beat logic: Hard deadline with cascading obstacles. +- Cliffhanger: Clock hits zero mid-action. +- Risk: Can feel mechanical without emotional anchor. +- IM affinity: Low inherent density. Clock is a pacing device. Moments must come from obstacles and environments. + +### Revenge / Justice Denied +- Core tension: "They took everything and no one will help." +- Beat logic: Protagonist wronged. Every attempt at justice blocked. +- Cliffhanger: In position to take revenge — but cost is becoming the thing they hate. +- Risk: Repetitive if every beat is "blocked again." +- IM affinity: Low-to-medium inherent density. Revenge tends to narrow the world rather than expand it. Forged Through Pain (~4% CTI) had severe IM desert, but the low CTI may be an IM execution problem rather than an engine problem. A revenge promo with strong IM density and world-expansion is untested — could perform. The engine itself is not disqualified. + +### Temptation of Power / Moral Corruption +- Core tension: "The power works, but it's changing them." +- Beat logic: Each use solves a problem and costs humanity. +- Cliffhanger: Using the power is the only option — but it completes the transformation. +- Risk: Needs precise calibration. Too dark = disengagement. +- IM affinity: Medium. Power manifestations can be IMs if each use looks and feels physically different. + +--- + +# PROPOSING A NEW ENGINE + +When source material doesn't fit a proven engine, a new engine can be proposed — but must be defined with the same structural clarity: + +1. **Core tension** — one sentence the audience feels +2. **Beat logic** — what each beat does to pressure that tension +3. **Central question contract** — what the audience is waiting for, and why it doesn't resolve +4. **Beat 1 minimum payload** — what must be established in the opening +5. **Escalation logic** — how stakes compound +6. **Cliffhanger shape** — the specific unresolvable fork +7. **IM affinity** — what types of Impact Moments the engine naturally produces, and where IM deserts are likely + +Default to proven engines. New engines carry untested risk. Only propose when the material genuinely demands a structure none of the proven engines can serve. + +--- + +# DOCUMENT REFERENCES + +Engine-specific rules only. For structural rules: the workflow files (W1–W5) and CLAUDE.md. +For workflow procedures: **Workflows** +For writing execution: **Writing Style** +For performance data context: **Performance Benchmarks** \ No newline at end of file diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/lineedit_codex.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/lineedit_codex.md new file mode 100644 index 0000000..2fe1cf5 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/lineedit_codex.md @@ -0,0 +1,50 @@ +# THE LINE-EDIT CODEX · v1 — the operator's notes, mechanized +*(The rulebook for W4 Station 2. Every class below was named by the operator on real output in the calibration rounds, with the operator's own fix as the exemplar. The editor walks these classes against a draft, fixes violations in place, and logs every edit as `[class] before → after`. It never rewrites voice, never restructures, never judges quality. Classes merge on entry — one rule in, overlap out. CONTROL LAW: run on Ebony + Draft Selection first; near-zero edits or the class that fired is tuned.)* + +--- + +## A · GREP-CLASS (pattern-detectable; fix mechanically) + +**A1 · NEGATION FLOURISH.** "without looking at a single one of them" · "didn't say a word" · "never looked at it" — describing what didn't happen as characterization. FIX: replace with what the character DID, or cut. *(Operator: "an AI-ism we ALWAYS have happen… GARBAGE.")* +**A2 · X-THE-WAY-Y SIMILE.** "he said the number the way a man reads a boot size off a box" · "smiling like a woman doing him a favor." FIX: cut the simile; state the action or the plain manner. *(Also covers voice-note phrasing leaking into narration.)* +**A3 · MANNER RIDER.** "said it easy" · "said it level" · "answered him flat" as attribution. FIX: cut, or replace with a physical action ("Rex grinned."). +**A4 · INVENTED IDIOM / FRESH IMAGE.** "got luck on him" · "empty dirt" · "something went hard and small behind his ribs" · "the trees get you first." FIX: the stock phrase or stock physiology. Operator pair: "hands like a woman of eighty" → *"Your mother looks eighty and she's only forty."* +**A5 · CLIPPED NAMES.** "One" for "Level One"; any rank, device, or faction shortened past first-hearing clarity. FIX: full name, every mouth, every time. +**A6 · ELIDED NOUN / INDIRECTION.** "Tuller dipped his own" · "the ink went down beside a signature ten seconds old." FIX: re-name the noun; state the act. → *"He wrote it directly beside Jasper's fresh signature."* +**A7 · PERSONIFICATION OF TIME/PLACE.** "listen to what noon does to you" · "here's what noon does to you." FIX: a named person or beast does the thing. → *"At noon, grown men with grown beasts will put you in the dirt."* +**A8 · UNTAGGED NARRATION IN A DIALOGUE BLOCK.** "He kept reading in the same flat voice" inside a speech. FIX: split to its own NARRATOR line — and if it adds no new information (it usually doesn't), cut it. +**A9 · APHORISM.** "The charge goes where the name goes." · "I read what's written" as a proverb-shaped summary. FIX: the character explains completely, in ordinary sentences. Operator model: *"I'm copying the accusation onto the line beside your signature… From today it's beside your name everywhere in this book."* +**A10 · DOUBLE-NARRATOR STACK / OVERSIZE BLOCK.** Two+ NARRATOR blocks in a row in an opening or confrontation, OR any narrator block over two sentences outside a licensed peak. FIX: interleave (one sentence of new information between voices) and split or cut oversize blocks — density is the defect even when every sentence is individually fine. +**A11 · PRE-ANNOUNCEMENT.** "And at last he let himself speak" · "Then she said the thing she'd come to say" — narration announcing a line before the line. FIX: cut the announcement; the line lands on its own. +**A12 · THE GLOSS (post-beat explanation — a ceiling-setter).** The narrator explaining a beat that just landed, in any costume: significance riders ("…which was worse") · verdict glosses ("There it was — …" · "That was the cruelest part…" · "And every word of it was true") · post-peak essays (the line lands, then two sentences explain why it was a blade). Flag every "There it was," "That was the," "What X didn't know," "And that was when it became clear." FIX: cut the gloss; where a beat genuinely needs a landing, give it a PHYSICAL REACTION SHOT (a face, a hand, the crowd) instead of a narrator verdict. The bar: *"The room went silent. The hand stayed extended. Unanswered."* — no essay on top. + +**A13 · REPORTING MODE (first-person promos only).** More than two "I saw / I watched / I noticed / I heard" per scene = the narrator reporting instead of living. FIX: remove the perceptual filter; put the thing itself on stage ("I watched the board glitch" → "The board glitched."). +**A14 · THE BECAUSE-WELD.** Gloss smuggled INTO the event sentence — event + world-rule + verdict chained by ", because / , so / , and" into one 30–45-word breath: ✗ "The whole hall waited for him to drop to his knees, and in Blazehollow a man's worth is read off the rank of the beast he binds, so cast out with a dying woman and no name, Jasper was now priced at nothing." FIX: split — one job per sentence; keep the event; the rule goes where the teaching schedule put it; the verdict earns at most one plain sentence (A12 governs whether it survives at all). Grep tripwire: ", because" and multi-", and" chains in narration. +**A15 · LISTENER CONFERENCING.** "And then, listener…" · "you and I know…" · "watch closely" — the narrator turning to the audience. BANNED everywhere except the CTA block. The pulp wink shares the secret in third person ("little did they know"); it never breaks the fourth wall. +**A16 · VOICE DESERT (restored law).** More than ~150 spoken words with no voiced line while a licensed speaker is on scene — a companion, the System, any present character. FIX: give the stretch to the mouth standing right there (a training montage with the talking chick silent through it is the canonical failure). + +## B · JUDGMENT-CLASS (checkable with the exemplars; fix by the pattern) + +**B1 · THE PASSIVE HERO.** A blow absorbed silently — "Jasper didn't turn around" · a tightened jaw as the whole response · a bare "No." FIX: he faces them and answers, naming his choice. Pairs: → *"He'll be in the ring at noon, Odell. Bring your money."* · "No." → *"Then go. I'm not leaving her."* — and the villain's LAST turn never goes unanswered (the hero closes, or the marked silence does). +**B2 · LITERARY IRONY WHERE PULP BELONGS.** Wry understatement at a reveal — "…and written it up as procedure." FIX: the naive serial register, played straight. Operator model: *"He was not an ordinary cadet — he was a vampire, and little did the others know: vampires could see in the dark. Everyone thought he was here as a punching bag, as bait. Quinn smiled. How wrong they were."* +**B3 · COMPRESSED CRUELTY.** A barb trimmed to an epigram. FIX: conversational, explicit, twist-the-knife tag; more biting = more words. Pair: "Is that the cottage air, or is that you?" → *"…they said she could die any week now. You've taken very good care of her, huh?"* +**B4 · INCOMPLETE DEAL/THREAT.** An offer without its downside, a threat without its agent. FIX: condition + payment + what it buys + concrete cost of refusing, named agents. Operator model: *"I'll tell you what. Admit you're everything everyone says you are, and I'll give you this coin. That should be enough to buy your mother another month."* +**B5 · BROKEN CAUSAL CHAIN.** A decision that skips its means — "If I drop, she dies. So I'm not dropping." FIX: the chain complete: the means named ("the only way I stay standing is to feed — so I feed"). +**B6 · LORE RIDDLE.** Backstory as inference-stack — "The book said he slipped the leash. Nobody left alive said otherwise." FIX: plain statement, source named, and only from the brief. → *"The town's register says he trespassed and got his own beast killed doing it. The whole town believes the book. Only he knows it's a lie."* +**B7 · UNESTABLISHED OBJECT IN AN ACTION BEAT.** The tripwire that exists only at the moment it fires. FIX: it enters through the hero's perception first. Operator pair: → *"…fumbling to stay close to Quinn — and that was when he saw the tripwire."* +**B8 · PRE-ANNOUNCED DANGER.** "…and every trap on the ground between here and there was live," a beat before a trap fires. FIX: cut the drumroll; the danger arrives through perception (B7), not prophecy. +**B9 · CLOSED SUSPICION.** "It was a lie, and Rex believed it." FIX: a villain who's been lied to stays suspicious — keep the thread open ("Sure you did."). +**B10 · MUDDLED ACTION MECHANICS.** An action beat folded into one clever compound sentence. FIX: sequential — one motion per clause, payoff visual last, reactions after. Operator model: *"He sidestepped her, grabbed her vest, and threw her backward just as the wire snapped tight and the charge exploded. The sky lit up white."* +**B11 · YO-YO BLOCKING / UNTRACKED EXITS.** Leaves, comes back three steps, leaves again; a character who exited reappearing unstaged. FIX: one-directional movement — the line comes before the exit; returns are staged. +**B12 · SMASH-CUT / MISSING HANDOFF.** A live exchange jumping to the next event with no transition. FIX: a voice carries the handoff (a countdown, a call, an order). Operator model: *"Get together — you have ten seconds!"* +**B13 · CRIER EXPOSITION — run the COSTUME TEST.** A line that would survive being handed back to the narrator with no loss is exposition wearing a dialogue costume. FIX: re-voice, never cut — give the fact to the mouth with a stake in it (the antagonist enjoying it, the witness flinching); a bystander speaks TO a person ABOUT the thing in front of them; officials may announce, completely; orientation folds into contempt or taunts. +**B14 · UNRELATED OBSERVATION.** A neutral crowd fact the hero isn't inside — "Nobody in the line argued, because nobody else was a One." FIX: relate it to the hero. → *"Nobody had any faith in a Level One. And nobody was going to stand up for him — because nobody else was as low-leveled."* +**B15 · EMPTY GAP-MARK.** A verdict fragment doing the marking — "Nobody had ever proved it. It changed nothing." FIX: plain flowing sentence holding both halves. → *"He'd saved Sana's life — or at least a limb. And this was how they rewarded him."* +**B16 · RATIONALIZED PASSIVITY (B1's worst disguise).** Narration justifying the hero's silence — "He held it. He gave this woman nothing to carry back." FIX: silence never gets a defending sentence. Silence is legal ONLY when it IS the act (releasing the medal, dropping the coin) — never as the response to being directly addressed. If he doesn't speak, he ACTS; usually he speaks: short, naming his choice. +**B17 · THE LEDGER CLOSE.** An ending built of consecutive narrator blocks itemizing what's unresolved — a state-of-the-world recap. FIX: the close is a SCENE in motion — the hero mid-action at a threshold, one singular dated must-resolve loop foregrounded, closing on forward QUESTIONS asked as questions, then the CTA. (The anchor bar: *"Who is Boris? Why does a vagrant move like a soldier?"*) +**B19 · RE-ARM RE-TEACH.** A withheld truth, once revealed, is re-armed in ONE clause touching what the listener already owns ("the square was laughing at the strongest beast in the marches") — never re-explained. Re-running the reveal's mechanism or vision ("we have both watched one star become a thousand…") is fat wearing irony. FIX: cut to the one-clause touch. +**B18 · THE OUTCOME-PROMISING WINK.** "…was carrying the one thing that could bury every person in that courtyard" — the narrator promising a FUTURE payoff, reassuring the listener in advance. FIX: cut. The licensed pulp wink ("little did they know…") shares what IS true at the moment of the reveal — it never promises what WILL happen. Reveal-irony arms tension; outcome-promises drain it. + +## C · EDITOR DISCIPLINE + +Fix ONLY what a class names. Log every edit `[class] before → after`. Where an operator model is quoted above, match its register, never its content. If a sentence seems wrong but no class fits: flag it, don't touch it — flags route to the operator and, if ruled, become the next class. Zero-edit scenes are the goal state; on the two control scripts, zero edits is the calibration requirement. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/microbeat_taxonomy.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/microbeat_taxonomy.md new file mode 100644 index 0000000..816ffd0 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/microbeat_taxonomy.md @@ -0,0 +1,318 @@ +# Microbeat Taxonomy + +**Status:** Locked +**Load:** Auto-loaded with W3 (Beat Sheet), W4 (Script), W5 (Analysis). Cross-referenced from `CLAUDE.md`. +**Purpose:** Standard taxonomy for tagging every micro-beat in a promo so W3 specifies function precisely, W4 generates against function-specific calibration, and W5 evaluates against the same rubric. +**Companion:** `microbeat_worked_examples.md` (per-engine worked examples; grows over time). +**Calibration:** `scene_exemplars.md` (execution-level rubric per subtype). +**Engine logic:** `hook_engine_library.md` (engine-specific structural rules). + +This file defines the structure (5 main tags + subtypes + per-beat modifiers + anti-pattern flags). Execution-level calibration and engine logic live elsewhere. This file is the connective tissue. + +--- + +## 1. The Five Main Tags + +### `SETUP` +Establishes character position, world position, stakes architecture, or institutional context. Audience exits a SETUP beat with new information about the world or the protagonist's situation. Foundation, not propulsion — should be compressed. Excessive SETUP indicates the script is explaining instead of showing. + +### `INJUSTICE STRIKE` +The protagonist (or the protagonist's bond object / stakes character / a third party the protagonist morally cares about) is harmed in a way that registers as unfair to the audience. Audience exits an INJUSTICE STRIKE wanting the wrong to be answered. Primary driver of Q1 retention and primary fuel of the BECAUSE chain. + +### `ESCALATION` +Pressure on the protagonist increases. Stakes raise, antagonist gains, world tightens, or the protagonist's choice worsens their position. ESCALATION beats compound prior beats — they require something to escalate FROM. + +### `TURN` +The protagonist's situation, capability, or the audience's model of the world pivots. TURN beats are the IM beats: moments where understanding shifts. Every TURN beat carries a required modifier: `WITHHELD` (planted hook for later) or `SATISFIED` (audience exhales). SATISFIED before CLIFF triggers a flag. + +### `CLIFF` +The promo ends mid-trajectory with a structural pull forward into the show. Not "endings" — interruptions calibrated to drive install. A beat that delivers resolution does not pass as CLIFF. + +--- + +## 2. Required Per-Beat Fields + +Every micro-beat in W3 carries: + +1. **Tag** (one of the five) +2. **Subtype** (from the catalog below; CLIFF beats may carry primary + secondary) +3. **Set-piece strength: Low / Medium / High** — distinguishes structurally-correct beats from trailer-promotable ones. A `TURN: REVEAL` via phone call is structurally identical to one via public bow but trailer-wise incomparable. Promos need an average set-piece strength above Medium; runs of Low beats kill trailer energy regardless of structural soundness. + + **Tie-breaker:** when uncertain between two levels, default to the lower. A slap is Medium (not High); a pulled knife is Medium (not High) unless it's used in front of a crowd or the blade catches a defining visual. Defaulting low keeps the spec honest — operators tend to over-call High. + + **Genre-aware anchors** (High examples by genre): + - *Fantasy / action / system-based*: monster transformation, weapon reveal, public bow, crowd reversal, system alert, beast evolution, magical eruption, arena reversal + - *Romance / romantasy*: public confession, wedding interruption, ballroom reveal in front of court, mate-bond manifestation, kiss-as-power-activation, royal court humiliation + - *Contemporary / social drama*: family-dinner confrontation, courtroom verdict, press conference reveal, public arrest, boardroom reversal, paternity reveal, walk-out scene with crowd watching + - *Returnee / identity-inversion*: convoy arrival, public identity reveal, formal salute / bow from authority figures, character switching context (e.g. drifter to billionaire), tribunal reversal + + Medium across all genres: intimate room confrontations, two-character physical exchanges, one-on-one threats without crowd. Low across all genres: phone calls, voiceover, off-screen action, characters describing events rather than witnessing them. +4. **TURN beats only:** WITHHELD / SATISFIED modifier +5. **TURN: REVEAL beats only:** named overturned assumption (what audience belief is being inverted — if you cannot name it, the beat is exposition) +6. **INJUSTICE STRIKE beats only:** specific cruelty modality (which object/act carries the wrong — generic abstractions fail) +7. **One-line beat description** (what the audience sees/hears) +8. **Pressure** — the throughline: why this beat matters structurally and where it points. The home for analysis that must NOT appear in the W3 prose body. Inherited and refined from the W2 brief's THROUGHLINE PRESSURE. +9. **Dialogue plan** — who carries the beat *in voice* and the key exchange, not just the single load-bearing line. Mark the beat **`carry: dialogue`** (the move plays primarily through spoken exchange), **`carry: narration`** (primarily narrator / interior-monologue prose), or **`carry: mixed`**, and name the load-bearing line(s) plus the reactive lines that frame them (antagonist jab, crowd reaction, witness aside, authority ruling). This is the field that lets W4 *render* dialogue instead of inventing it or narrating around its absence. A beat with no exchange named defaults to narration — and a sheet weighted to `carry: narration` produces a script that misses the W4 Dialogue-Ratio Gate (see Section 8 dialogue-balance review flag). This does not relax field 7's leak rule: the prose body still renders event, not meaning; the *exchange* is specified here and in the load-bearing lines. + +--- + +## 3. Subtype Catalog + +### SETUP subtypes + +| Subtype | Definition | Anchor example | +|---|---|---| +| `STATE` | Establishes character or world state without specific stakes consequence. Default subtype; should not exceed 25% of total micro-beats; **may not be the first beat** of the promo. | Tristan chained in throne hall (GU Love Bite, $2.64 CPI) | +| `STAKES-ANCHOR` | Material consequence specification with **countable nouns + hard deadline**. Generic stakes ("rent due") fail this subtype. | "$900 by sundown / changing the locks myself" (GU9750 Pawn Shop, $4.20 CPI); "sold the house for 500K crystals / three months back rent / lose the kitchen" (GU9892 Pearl Crystal, $3.19 CPI) | +| `BOND-DEMO` | Protagonist + bond object proving the bond through small physical action. Not the verbal claim of bond — the *action* that earns audience investment. Required in Self-Sacrifice engines. | Brian making noodles for Stella and Harper at midnight (GU TBB Supermarket, $2.95 CPI); ~~Cloud nuzzling Ren in the dorm (GU9892 Pearl Crystal)~~ ⚠ **off-essence — "Cloud" is not a WBT character (HARD BLOCK 8); for WBT the bond object is Ren's parents, not the spore** | +| `INSTITUTIONAL-SETUP` | The world's ranking/ceremony/exam system is shown in operation. Distinct from `TURN: INSTITUTIONAL-DEPTH` — this is the scene that *establishes* the institution; the TURN is where the institution reveals something unexpected. | Weapon Selection ceremony opening (GU MVS Weapons); Hatching Chamber egg ceremony (GU WBT Spore Cloud); Aristocracy Exam registration (GU SoaW) | + +### INJUSTICE STRIKE subtypes + +| Subtype | Definition | Anchor example | +|---|---|---| +| `PHYSICAL` | Bodily harm to protagonist or bond object. | Niall plucks feathers from Midas one by one (GU RBM Daddy Issues, $4.57 CPI) | +| `SOCIAL` | Public humiliation, identity erasure, named-cruelty in front of an audience. | "She kept the menu. She kept it. To laugh at." (GU9750 Pawn Shop) | +| `INSTITUTIONAL` | Cruelty delivered through institutional language or formal ritual. The world's *rules* are the cruelty. | The wedding officiant's scroll listing every right stripped: "She will bear his name. She will not speak in council. She will not hold property." (GU Princess Ebony, $4.56 CPI) | +| `NEAR-EXPOSURE` | Physical danger AND detection danger present in the same beat. Engine-specific to Secret Identity. | Loop's accusation "He used an ability!" during Quinn's spear catch (GU MVS Weapons) | +| `INTIMATE-BETRAYAL` | Betrayal revealed during the act of physical violence. The information lands at the moment of maximum bodily impact. | "Wyatt sends his regards" delivered immediately before the bite (GU Love Bite, $2.64 CPI); Lydia kissing Niall while plucking Midas's feathers (GU RBM Daddy Issues) | +| `RELATIONAL` | A loved one (parent, bond object, stakes character) is targeted by the antagonist **because of** the protagonist's relationship to them. The antagonist's calibration is the protagonist's wound — the third party is the surface victim but the protagonist is the intended pain recipient. Operator test: would the antagonist still do this if the protagonist weren't present / wouldn't know? If no → RELATIONAL. If yes → COLLATERAL-STRIKE. | Niall killing Midas to wound Jasper through the bond (GU RBM Daddy Issues, $4.57 CPI); Wei threatening to extract Cloud for materials if Ren fails (GU9892 Pearl Crystal); "You sold your house for that? Your son has failed you" — hypothetical cruelty directed at parents but targeting Ren | +| `COLLATERAL-STRIKE` | Injustice against a third party caused by or radiating from the protagonist's position or actions, **without** the antagonist specifically targeting the protagonist through them. The third party is caught in the splash, not used as a weapon. Distinct from RELATIONAL (above) and from `ESCALATION: COLLATERAL-COST` (cumulative cost, not discrete strike). | The bruised woman: "My husband beat me because of YOU! Because of what you did at the ball!" (GU Princess Ebony) — her husband isn't trying to hurt Ebony, he's exercising power on his wife given social permission by Ebony's defiance | + +### ESCALATION subtypes + +| Subtype | Definition | Anchor example | +|---|---|---| +| `EXTERNAL` | Antagonist gains capability, advantage, or scale. World tightens around the protagonist. | Chris Jones's bodyguards arriving in formation (GU9750 Pawn Shop); Kruger receiving Dragonite pill | +| `INTERNAL-REFUSAL` | The protagonist's choice worsens their own position. Each refusal of an easier exit costs more. Engine-specific to Self-Sacrifice. **Engine tie-breaker:** in non-Self-Sacrifice engines, protagonist defiance tags as `TURN: AGENCY-CLAIM` instead. | Karl turning down the WilderBear, then getting banned from the event, then running back for Rae (GU FLBM Dragon Battle, $3.64 CPI); Nathan refusing wardship from House Raven (GU SoaW) | +| `COLLATERAL-COST` | Compounding price paid by the bond object or stakes character as a consequence of the protagonist's ongoing choices. The *cumulative* harm to the bond — not the discrete strike. Does not count toward injustice density. | ~~Cloud's wounds compounding from each new Stalker/Spire encounter (GU9892 Pearl Crystal)~~ ⚠ **off-essence — the spore is not a wound-taking companion "Cloud" (HARD BLOCK 8/1)**; Hawk and Rae taking damage across multiple trial events | + +### TURN subtypes + +Each TURN beat carries a required `WITHHELD` / `SATISFIED` modifier. SATISFIED TURNs that close the BECAUSE chain emotionally before the CLIFF trigger a flag for review. + +| Subtype | Definition | Maps to existing IM type | +|---|---|---| +| `REVEAL` | New information overturns a specific named audience assumption. Required field: which assumption is being inverted. If author cannot name the assumption, the beat is exposition and gets retagged or cut. Catch-all of last resort — use one of the five named IM types below if it fits. | — | +| `POWER-ACTIVATION` | The protagonist's ability activates for the first time. Distinct from STATUS-INVERSION because it is character-state-change, not just audience-model-update. Must be defamiliarized/paradoxical to protect Q2 retention. | — | +| `AGENCY-CLAIM` | The protagonist defies, refuses, or claims voice **without power activation**. Distinct from POWER-ACTIVATION (no ability activates) and from `ESCALATION: INTERNAL-REFUSAL` (which worsens the protagonist's position — AGENCY-CLAIM claims it). The beat that converts a passive-victim opening into an active protagonist. **Engine tie-breaker:** in Self-Sacrifice engines this beat is unavailable — use `ESCALATION: INTERNAL-REFUSAL` instead. In all other engines, AGENCY-CLAIM is the correct tag for protagonist defiance/voice-claiming. | — | +| `STATUS-INVERSION` | The protagonist's social or power position visibly flips. Audience sees who they WERE vs who they ARE. | Status Inversion IM | +| `SYSTEM-DISCOVERY` | An artifact, system, or mechanic reveals its rules to the audience through use. | System/Artifact Discovery IM | +| `POWER-CEILING` | The scale of what's possible in the world expands in front of the audience. | Power-Ceiling Reveal IM | +| `INSTITUTIONAL-DEPTH` | An institution's depth or hidden architecture is revealed during use. Distinct from `SETUP: INSTITUTIONAL-SETUP` — that establishes the institution; this exposes what was hidden inside it. | Institutional Depth IM | +| `WORLD-BORDER` | The world's scope expands — new realm, new system, new category of being. | World Border IM | + +### CLIFF subtypes + +CLIFF beats carry **primary + at most one secondary** subtype. Secondary must be the *second-strongest pull*, not every applicable one. If a CLIFF could plausibly carry three subtypes, the third drops off. This prevents tagging inflation — every CLIFF appearing to "do everything" collapses discrimination. + +Example: "Who else knows you opened it?" is `QUESTION-MULTIPLIER (primary) + DREAD-FORWARD (secondary)` — opens new questions AND seeds inescapable threat. The HUNGER-FORWARD reading (audience installs to see the Sterling Dynasty payoff) is the third-strongest pull and drops off. + +| Subtype | Definition | Performance pattern | +|---|---|---| +| `QUESTION-MULTIPLIER` | Opens 2+ new questions the promo never raised. Strongest Q4 hold + strongest CTR. | GU9892 Pearl Crystal "ancient knowledge erupts"; GU RBM Daddy Issues red-eye reveal; GU9686 SS Eviction shadow army vision | +| `HUNGER-FORWARD` | Anticipates a payoff visible in the show. Audience installs to see the reward. | GU FLBM Dragon Battle royal-blood reveal; GU WBT Spore Cloud blueprint mode | +| `DREAD-FORWARD` | Anticipates an inescapable danger. Audience installs to see how the protagonist survives. | GU MVS Weapons (full vampiric reveal, both bullies watching) | +| `RESOLUTION` | **KILL FLAG.** Delivers the central payoff inside the promo. Q4 collapses; CTR may rise from curiosity but CTI suffers. | GU FLBM Trading Up "Hawk and Rae are extraordinary"; GU TS Tragic Trillionaire eyes-flash-gold reveal | + +--- + +## 4. Universal vs Engine-Specific Subtypes + +| Subtype | Universal | Self-Sacrifice required | Secret Identity required | Underdog Awakening required | +|---|:---:|:---:|:---:|:---:| +| SETUP: STATE | ✓ | | | | +| SETUP: STAKES-ANCHOR | ✓ | | | | +| SETUP: BOND-DEMO | | **required** | | | +| SETUP: INSTITUTIONAL-SETUP | ✓ | | | | +| INJUSTICE STRIKE: PHYSICAL | ✓ | | | | +| INJUSTICE STRIKE: SOCIAL | ✓ | | | | +| INJUSTICE STRIKE: INSTITUTIONAL | ✓ | | | | +| INJUSTICE STRIKE: NEAR-EXPOSURE | | | **required** | | +| INJUSTICE STRIKE: INTIMATE-BETRAYAL | ✓ | | | | +| INJUSTICE STRIKE: RELATIONAL | ✓ | | | | +| INJUSTICE STRIKE: COLLATERAL-STRIKE | ✓ | | | | +| ESCALATION: EXTERNAL | ✓ | | | | +| ESCALATION: INTERNAL-REFUSAL | | **required** | | | +| ESCALATION: COLLATERAL-COST | ✓ | | | | +| TURN: REVEAL | ✓ | | | | +| TURN: POWER-ACTIVATION | ✓ | | | **delayed past 40%** | +| TURN: AGENCY-CLAIM | ✓ | | | | +| TURN: STATUS-INVERSION | ✓ | | | | +| TURN: SYSTEM-DISCOVERY | ✓ | | | | +| TURN: POWER-CEILING | ✓ | | | | +| TURN: INSTITUTIONAL-DEPTH | ✓ | | | | +| TURN: WORLD-BORDER | ✓ | | | | +| CLIFF: any non-RESOLUTION | ✓ | | | | + +--- + +## 5. Worked Example A — GU9750 Pawn Shop (Identity Inversion / Hidden Hero — $4.20 CPI / 14.4% CTI) + +Companion iteration GU9587 ($3.38 CPI / 22.3% CTI) is the cleaner ship version of the same body script — same tagging applies. + +| # | Tag · Subtype | Modifier | Set-piece | Beat | +|---|---|---|---|---| +| 1 | SETUP · INSTITUTIONAL-SETUP | — | Med | Pawnshop opening + "Sterling blood is back" (planted institutional mystery) | +| 2 | SETUP · STATE | — | Low | Apartment hallway, $43 in wallet, landlord shouting through door | +| 3 | SETUP · STAKES-ANCHOR | — | Low | "Twenty-four hours to come up with the money or you're getting evicted" | +| 4 | SETUP · STATE | — | Med | Flashback to orphanage at age 5, nun, locket pressed into hand | +| 5 | TURN · REVEAL | WITHHELD | Med | Shopkeeper pulls gun, calls someone: "The Sterling blood is back" (assumption overturned: this locket is institutionally tracked) | +| 6 | INJUSTICE STRIKE · INTIMATE-BETRAYAL | — | Med | Damian's call: Jenifer at Blueprint Hotel | +| 7 | INJUSTICE STRIKE · INTIMATE-BETRAYAL | — | High | Jed walks into Room 109, finds Jenifer in bed with Chris Jones | +| 8 | INJUSTICE STRIKE · SOCIAL | — | Med | Chris's "kept the menu" monologue (8 specific cruelties in 70 words) | +| 9 | INJUSTICE STRIKE · PHYSICAL | — | High | Bodyguards beat Jed; Chris narrates "By next Tuesday nobody will remember your name" | +| 10 | ESCALATION · EXTERNAL | — | High | Body dumped in SUV, thrown in alley dumpster | +| 11 | TURN · POWER-ACTIVATION | WITHHELD | High | Locket opens, eagle vision floods Jed, healing | +| 12 | TURN · WORLD-BORDER | WITHHELD | Low | Phone call from Sylvia Sterling (audio-only, but scope expands to "Sterling Dynasty") | +| 13 | INJUSTICE STRIKE · INSTITUTIONAL | — | Med | Landlord still threatening locks despite everything | +| 14 | SETUP · STATE | — | Low | Shower, frayed white button-down, locket inside collar | +| 15 | INJUSTICE STRIKE · SOCIAL | — | Med | Crystal Hollow hostess: "Shall I call the homeless shelter?" | +| 16 | TURN · STATUS-INVERSION | SATISFIED | High | Hostess sees Sterling name on screen, color leaves cheeks, bows (trips SATISFIED-risk review; clears per function-based rule — see modifier check below) | +| 17 | TURN · INSTITUTIONAL-DEPTH | WITHHELD | Med | Black access card embossed with the same eagle as the locket | +| 18 | SETUP · STATE | — | Low | Private elevator rises, Jed alone in Celestial Suite | +| 19 | ESCALATION · EXTERNAL | — | High | Chris arrives with surveillance photos, splint on nose, manager flanking | +| 20 | INJUSTICE STRIKE · SOCIAL | — | High | Chris's "do you know who my father is" monologue + photos | +| 21 | TURN · REVEAL | WITHHELD | High | Doors open from corridor side; six grey-suited men walk in (assumption overturned: Chris is not the most powerful person in this room) | +| 22 | TURN · STATUS-INVERSION | WITHHELD | High | Sylvia Sterling stops in front of Jed, drops to a bow; six guards bow in unison | +| 23 | CLIFF · QUESTION-MULTIPLIER + DREAD-FORWARD | — | High | "My Lord Sterling. Who else knows you opened it?" | + +**Tag distribution check:** 6 SETUP / 7 INJUSTICE STRIKE / 2 ESCALATION / 7 TURN / 1 CLIFF = 23 beats. ✓ + +**Subtype check:** +- STATE: 4/23 = **17.4%** (within 25% cap) ✓ +- TURN: 7/23 = **30.4%** (Identity-Inversion engine, expected ratio range) ✓ +- No 30%-of-runtime window without a TURN beat ✓ +- First beat is `SETUP: INSTITUTIONAL-SETUP` with planted hook (not STATE) ✓ + +**Set-piece check:** +- Average set-piece strength: ~Med-High (Pawn Shop runs on cinematic specificity — beats 7, 9, 10, 11, 19, 20, 21, 22, 23 are all High) ✓ +- Low-spectacle runs: beats 2–4 (3 consecutive Low/Med opening beats — flag for review, but holds because beat 5 lands a High reveal immediately after) ✓ + +**Modifier check:** All TURN beats are WITHHELD except beat 16 (hostess bow), which is SATISFIED and trips the review flag. Per the function-based rule (Section 8): the next non-SETUP destabilizing beat is beat 19 (ESCALATION:EXTERNAL — Chris arrives with surveillance photos), which arrives before the next TURN (beat 21). Flag clears. ✓ + +--- + +## 6. Worked Example B — GU9892 Pearl Crystal (Self-Sacrifice — $3.19 CPI / 19.1% CTI) + +(Same beat sheet as GU9672, $6.37 CPI — production iteration GU9892 represents tighter execution of identical structure. Tagging applies to both.) + +Included to address Identity-Inversion bias in the Pawn Shop example. Self-Sacrifice engines distribute beats differently: heavier on ESCALATION:INTERNAL-REFUSAL, lighter on TURN density, anchored by BOND-DEMO early. + +> ⚠️ **OFF-ESSENCE BEAT SHEET — TAGGING ONLY, NOT A CANON MODEL (WBT HARD BLOCK 8 + 1 + 3).** This Pearl Crystal beat sheet is retained to illustrate *micro-beat tagging* for a Self-Sacrifice engine. Its **content is off-canon**: it treats Ren's spore as a sentient companion "Cloud" that nuzzles, absorbs hits, gets thrown/caught, bleeds, shields, and fires a "Decay" attack — violating HARD BLOCK 8 (no character named Cloud), HARD BLOCK 1 (spore is +10% strength only, never a combat power), and HARD BLOCK 3 (no beast-vs-beast / beast-as-weapon). The same beat sheet is dismantled in `working files/documentation/WBT_SummitClimb_v1.md`. **Read it for the tag/subtype distribution; do not reuse any "Cloud" beat as WBT content.** + +| # | Tag · Subtype | Modifier | Set-piece | Beat | +|---|---|---|---|---| +| 1 | SETUP · INSTITUTIONAL-SETUP | — | High | Assessment Day arena, ranking system on display, ceremony stage | +| 2 | SETUP · BOND-DEMO | — | Med | Flashback: Cloud nuzzles Ren in the dorm, mushrooms grow on his arms | +| 3 | INJUSTICE STRIKE · PHYSICAL | — | Med | Jin punches Ren at assessment, Cloud absorbs hits | +| 4 | INJUSTICE STRIKE · SOCIAL | — | High | Wei's "class disappointment" + "Fungus Freak!" stadium chant, parents in crowd | +| 5 | INJUSTICE STRIKE · INSTITUTIONAL | — | High | Iron Rank verdict: mines for life, Cloud extracted for materials | +| 6 | ESCALATION · EXTERNAL | — | Med | Wei's terms: Gold artifact by sunset or expulsion + extraction | +| 7 | SETUP · STAKES-ANCHOR | — | Med | Parents arrive: "sold the house / 500K crystals / 3 months back rent / lose the kitchen" | +| 8 | INJUSTICE STRIKE · SOCIAL | — | Med | Jin steals pendant: "If you're so special, then you don't need it!" | +| 9 | SETUP · STATE | — | High | Race begins, bioluminescent forest, students charging forward | +| 10 | TURN · SYSTEM-DISCOVERY | WITHHELD | High | Lurker barrier + Cloud's mana signature too faint (overturned: weakness as advantage) | +| 11 | INJUSTICE STRIKE · PHYSICAL | — | High | Jin grabs Cloud, throws him at Lurker | +| 12 | ESCALATION · INTERNAL-REFUSAL | — | High | Ren catches Cloud mid-air AND grabs pendant from Jin's neck — refuses to flee | +| 13 | TURN · WORLD-BORDER | WITHHELD | High | Mushrooms erupt across Ren's body — he belongs to this ancient ecosystem (overturned: Cloud is not isolated; world has hidden architecture) | +| 14 | ESCALATION · EXTERNAL | — | High | Gold level fog, Shadow Stalker emerges | +| 15 | INJUSTICE STRIKE · COLLATERAL-STRIKE | — | High | Stalker rakes Cloud; Cloud bleeds for Ren's choice | +| 16 | ESCALATION · INTERNAL-REFUSAL | — | High | Ren gives the Gold artifact to Taro instead of taking the easy win | +| 17 | TURN · WORLD-BORDER | WITHHELD | High | Summit platform reveals: ancient ruins above the clouds, Pearl Crystal on altar, dormant Crystalline Spires (audience's model expands: this place is older and bigger than the Academy knows) | +| 18 | INJUSTICE STRIKE · PHYSICAL | — | High | Jin punches Ren into the blast zone; Spires fire | +| 19 | ESCALATION · COLLATERAL-COST | — | High | Cloud shields Ren, takes the Spire blasts, fragments piece by piece | +| 20 | ESCALATION · INTERNAL-REFUSAL | — | High | Ren throws himself in front of Cloud; reciprocal sacrifice | +| 21 | TURN · STATUS-INVERSION | WITHHELD | High | Cloud's "Decay" snaps the necklace string Jin used to hold Ren; Jin flies into blast zone | +| 22 | TURN · POWER-ACTIVATION | WITHHELD | High | Ren touches Crystal; mushrooms blaze across body; knowledge floods through him | +| 23 | TURN · REVEAL | WITHHELD | High | "This isn't just a—" (overturned: Pearl Crystal is not a power artifact, it is something ancient the Academy never knew existed) | +| 24 | CLIFF · QUESTION-MULTIPLIER + HUNGER-FORWARD | — | High | "The light swallowed everything" + CTA: what did Ren see, why did it answer him, how does an Iron-rank know things no professor does | + +**Tag distribution check:** 4 SETUP / 7 INJUSTICE STRIKE / 6 ESCALATION / 6 TURN / 1 CLIFF = 24 beats. ✓ + +**Subtype check:** +- STATE: 1/24 = **4.2%** (well within cap) ✓ +- TURN: 6/24 = **25.0%** (Self-Sacrifice engine, upper end of typical range — unusually IM-dense for this engine) ✓ +- INTERNAL-REFUSAL: 3 occurrences (engine-required, present) ✓ +- BOND-DEMO: present (beat 2) ✓ +- COLLATERAL-STRIKE + COLLATERAL-COST both present, distinguished cleanly ✓ +- First beat is `SETUP: INSTITUTIONAL-SETUP` with the ranking ceremony visible (not STATE) ✓ + +**Set-piece check:** ~85% of beats run High. The single Low/Med opening sequence (beats 1–8) carries because beat 1 is High institutional spectacle. ✓ + +**Cross-script comparison:** Pawn Shop runs ~30% TURN beats / ~9% ESCALATION beats (Identity-Inversion engine drives dramatic-irony reveals). Pearl Crystal runs ~25% TURN beats / ~25% ESCALATION beats (Self-Sacrifice engine drives escalating-cost refusals, but Pearl Crystal sits at the high end of TURN ratio for the engine because the script unusually dense in world-discovery moments). Same CPI-tier outputs; different distributions. Engine determines the distribution shape, not a universal target ratio. + +--- + +## 7. Integration Touchpoints + +- **W1 Ideation:** Engine selection commits the script to required subtypes (per Section 4 matrix); W1 exit gate confirms the angle supports them. +- **W2 Skeleton:** Each high-level beat declares expected micro-beat count + dominant tag(s). +- **W3 Beat Sheet:** Each micro-beat carries all required fields per Section 2. +- **W4 Script:** Scene Gate reads tag + subtype + fields, runs calibration tests from `scene_exemplars.md`. +- **W5 Analysis:** Beat Analysis grades each micro-beat (Critical / Weak / Strong) with subtype-calibrated prescriptive suggestions; runs anti-pattern flag scan (Section 9). +- **CLAUDE.md:** Add `microbeat_taxonomy.md` to Reference files; auto-load with W3, W4, W5. + +--- + +## 8. Kill Flags and Review Flags + +**Kill flags** (mechanical structural failures — fail by definition): + +- `CLIFF: RESOLUTION` → fails. +- First beat tagged `SETUP: STATE` → fails. Promo openings must be charged: INJUSTICE STRIKE (any subtype), TURN (any subtype), SETUP: INSTITUTIONAL-SETUP with planted hook, or SETUP: STAKES-ANCHOR with deadline visible in the first beat. +- Underdog Awakening engine with `TURN: POWER-ACTIVATION` before 40% of runtime → fails delayed-activation rule. +- Self-Sacrifice engine with zero `SETUP: BOND-DEMO` micro-beats in the first 30% of runtime → fails tenderness rule. +- Self-Sacrifice engine with zero `ESCALATION: INTERNAL-REFUSAL` micro-beats → fails escalating-cost principle. +- Secret Identity engine with zero `INJUSTICE STRIKE: NEAR-EXPOSURE` micro-beats → fails dual-layer engine rule. +- More than 25% of total micro-beats tagged `SETUP: STATE` → fails specificity (too much undifferentiated exposition). +- Zero `INJUSTICE STRIKE` micro-beats (across all subtypes including COLLATERAL-STRIKE) in the first 25% of runtime → fails injustice density rule. +- Zero `TURN` micro-beats in any 30%-of-runtime window → fails IM-density / no-deserts rule. +- `TURN: REVEAL` without named overturned assumption → fails (the beat is exposition). +- `TURN` beat without WITHHELD/SATISFIED modifier specified → fails (incomplete tag). + +**Review flags** (do not auto-kill; surface for operator decision): + +- Any `TURN` beat marked `SATISFIED` before the CLIFF → flag. Function-based rule: the SATISFIED beat is safe only if **the next destabilizing beat (ESCALATION or INJUSTICE STRIKE) arrives before the next TURN or CLIFF.** If the script's next non-SETUP beat after the SATISFIED TURN is another TURN or the CLIFF, the satisfaction has settled — the SATISFIED TURN promotes to kill. The Pawn Shop beat 16 (hostess bow, SATISFIED) clears the flag because the next non-SETUP beat is beat 19 (ESCALATION:EXTERNAL — Chris arrives with photos), which arrives before the next TURN (beat 21). Operators are not permitted to insert filler SETUP beats to game the gap. +- Three or more consecutive beats without either a High set-piece OR a sharp audience-model shift (INJUSTICE STRIKE or TURN succession) → flag. Trailer energy bleeds out when neither visual spectacle nor narrative escalation is doing the work. Three Medium beats can be fine if they are volatile; three merely functional beats are the problem. +- Tag distribution skew (>40% of beats in any single tag) → flag. Indicates the script is mono-functional (all setup, all escalation, etc.). +- A `CLIFF` or `TURN: POWER-ACTIVATION` whose payoff has no earlier plant in the sheet → flag (broken plant spine). The converting payoffs — a climax that detonates a planted detail, an activation the audience was seeded for — require an earlier seed; an unplanted payoff lands weaker and leaves a hole in the Plant/Payoff Map. +- **Light-dialogue sheet:** more than ~40% of non-SETUP micro-beats marked `carry: narration` (field 9), or dialogue/mixed-carry beats whose Dialogue plan names no actual exchanges → fix before lock, don't just flag. A light-dialogue sheet hands W4 a blueprint it can only render below the Dialogue-Ratio Gate hard floor (workflow4: 50% Multi-Cast VO / 45% Single-Cast), which blocks delivery and forces a script-level Deficit Pass. W3 rebalances the convertible beats to `carry: dialogue` / `carry: mixed` and names their exchanges before lock; if the imbalance is structural, escalate to operator (see workflow3 light-dialogue gate). +- **Untraced canon:** any set-piece, world-mechanic, lore claim, or quantity (tenure/count/date/duration) in the sheet that cannot be pointed to a world-bible line (or an approved premise note) → flag for operator approval (fires `CANON-FABRICATED`, Section 9). New *staging* of a committed move is fine; new *world behavior / lore / quantity* is not. + +**On engine-dependent target ratios:** + +Universal floor: no 30%-of-runtime TURN-desert. +Engine-specific target ranges are emerging from the data but not yet locked: +- Identity Inversion / Secret Identity engines: ~25–35% TURN beats (high reveal density) +- Self-Sacrifice engines: ~15–25% TURN beats (compensated by ESCALATION:INTERNAL-REFUSAL density) +- Underdog Awakening engines: ~20–28% TURN beats (with POWER-ACTIVATION delayed) + +These ranges will tighten as more paired data accumulates. For now, deviations outside these ranges flag for operator review rather than auto-kill. + +--- + +## 9. Anti-Pattern Flags + +Distinct from tags (what beats *are*) and kill flags (mechanical structural failures). Anti-pattern flags identify what beats *fail at being* — surface failure modes within otherwise tag-compliant beats. Run by W5 as a separate scan; raised as revision requests. + +| Flag | Definition | Counter-pattern (winner) | +|---|---|---| +| `VILLAIN-MONOLOGUE-OVERRUN` | Antagonist speech exceeds 30 words without intervening physical action or protagonist reaction. The cruelty becomes lecture; embeddedness (per `scene_exemplars.md`) is lost. | Chris Jones's monologue in GU9750 Pawn Shop is 70 words but broken across 8 distinct cruelties + Jed's reactions + the slap-cheek interruptions — the speech is paced through the action, not delivered as a block. | +| `MECHANIC-TOLD-NOT-SHOWN` | A world rule, system mechanic, or institutional logic is *named* in dialogue or narration without being *demonstrated* in the same beat. The audience learns it as exposition instead of discovering it through use. | `TURN: SYSTEM-DISCOVERY` in GU9892 Pearl Crystal — the audience learns "Cloud's mana signature is below detection threshold" because they *see* the Lurker ignore Cloud, not because someone explains the rule. *(⚠ craft mechanism is valid; the "Cloud" artifact is off-essence — HARD BLOCK 8 — restage as the spore/Ren, no companion.)* | +| `BOND-CLAIMED-NOT-DEMONSTRATED` | The protagonist (or narrator) states the strength of the bond verbally without a `SETUP: BOND-DEMO` beat earning the audience's belief through small physical action. The bond is asserted; the audience does not feel it. | Cloud nuzzling Ren in the dorm + mushrooms growing on Ren's arms during punches (GU9892 Pearl Crystal) — the bond is demonstrated in two specific physical actions before the script ever names it. *(⚠ off-essence example — "Cloud" is not a WBT character, HARD BLOCK 8; for WBT, demonstrate the bond through Ren ↔ parents instead.)* | +| `STAKES-VAGUED` | A `SETUP: STAKES-ANCHOR` beat fails to name countable nouns + hard deadline. Generic stakes ("rent due," "expensive treatment," "could lose everything") fire this flag. | GU9892 Pearl Crystal's "sold the house for 500K crystals / three months back rent / lose the kitchen if Iron when semester ends" — every variable is countable and clocked. | +| `STAKES-FABRICATED` | A `SETUP: STAKES-ANCHOR` beat carries specific countables but the countables are *not grounded in the source show*. The numbers are invented by the promo to clear the STAKES-VAGUED flag — but the listener who installs to find them will not. **W5 must cross-check stakes specifics against the world bible, source episodes relevant to the promo window, or an approved premise note.** If countables cannot be traced to source material, the flag fires and the beat reverts to STAKES-VAGUED (or the angle reworks to use show-grounded countables). | Pearl Crystal's parental-debt numbers are show-grounded (the source establishes the family's poverty and reliance on the academy). Conversely, a promo that invents a "500-crystal medicinal-herb fee" with no source warrant would fire STAKES-FABRICATED. | +| `INJUSTICE-LABELED-NOT-INFLICTED` | An INJUSTICE STRIKE beat relies on labels (pathetic, worthless, loser, freak) rather than specific cruelty modality (objects, numbers, named acts, physical detail). Fails Test 1 of antagonist cruelty calibration in `scene_exemplars.md`. | Chris Jones: "She kept the menu" — specific object doing the cruelty work. | +| `CLIFF-RESOLVES` | A beat tagged CLIFF lands with closure of the central question. Sister-flag to the RESOLUTION kill, but catches the *softer* version: the CLIFF that delivers emotional satisfaction even if the literal narrative is interrupted. | GU FLBM Trading Up's "Rita laughs — beasts are extraordinary" tags CLIFF structurally but the audience experiences closure; this flag fires; the CLIFF promotes to RESOLUTION → kill. | +| `PROSE-EDITORIALIZES` | The micro-beat's prose states its own meaning instead of rendering the event — thesis/aphorism tails ("being seen is the first step toward being discovered"), named emotion ("he had never felt more alone"), or a STATE/stakes explanation occupying the body of the beat in place of a filmable event. The structural reading belongs in the Pressure/Movement fields, not the prose. **Test:** delete the annotations — if the prose still tells you what the beat MEANS, the meaning has leaked in. | The board-glitch beat (W3 exemplar): prose renders the stutter and the "one hundred percent confidence" re-select; the meaning ("the system insists") lives only in Pressure/Movement. | +| `CANON-FABRICATED` | A beat invents a world-mechanic, device behavior, lore claim, or quantity (tenure, count, date, duration) that is not in the world bible — broader than `STAKES-FABRICATED` (which is scoped to STAKES-ANCHOR countables). The realization step is licensed to invent the *staging* of a move the skeleton already committed (the board glitch dramatizes "the system flags him"); it is NOT licensed to invent new *rules* (a wristwatch that stamps or color-codes squad placements), new *lore* ("a thousand-year war on vampires"), or new *quantities* ("the way it has run for two centuries"). **Test:** can each mechanic / lore claim / quantity be pointed to a bible line? If not it fires — re-ground it in a bible-true mechanic, tag it `INVENTION` for operator sign-off, or fall back to the committed move. The place to stop fabrication is HERE, upstream, before W4 blesses it as "in the sheet." | MVS: the wristwatch *reads and displays a power level* (bible) — dramatizing the draft as the watch chiming the level is grounded; inventing green/gold squad-stamps and "two centuries of clean drafts" is not. | +| `TERMINOLOGY-DRIFT` | A beat re-voices a locked canonical term instead of inheriting it verbatim — a synonym, nickname, or invented label standing in for the bible's system noun, in narration or in the system's own labels. **Test:** does every system noun match the world bible's Canonical Terms lock? In-character insults inside dialogue are exempt; narration and system labels are not. | MVS: levels are "Level 1–8 / Level One" and the watch displays a *number* — "one-star," "stars," or a star-stamped watch face is drift; "one-star runt" is allowed only as an occasional in-character jab, never as narration's default noun. | + +Anti-pattern list grows over time. New entries require empirical evidence (a failure case from the audit data) before being added. + +--- + +## 10. Maintenance + +Single source of truth for the tag system. New subtypes require empirical evidence from at least one shipped script at target CPI before being added. Open questions raised during use should be appended below. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/performance_benchmarks.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/performance_benchmarks.md new file mode 100644 index 0000000..82e80b2 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/performance_benchmarks.md @@ -0,0 +1,827 @@ +# ============================================================ +# PERFORMANCE BENCHMARKS +# STATUS: LIVING DOCUMENT — update after every promo ships +# This file is empirical data. Structural rules live in the workflow files (W1–W5) and CLAUDE.md. +# Engine definitions live in Hook Engine Library. +# ============================================================ + +# TARGETS + +- CPI: < $6 +- CPM: < $20 +- 3-second play rate: > 50% +- Thruplay: > 20% +- 0–25% retention: strong/stable +- Q2–Q4 retention: no collapse +- 0–95% completion: > 10% +- CTR: > 2% +- CTI: > 12% + +--- + +# PROMO LOG + +## Weapons (MVS — Quinn) + +- **Engine:** Secret Identity (Threat of Exposure) +- **Shape:** Event-based (Weapon Selection → Arena Duel) +- **Opening:** Visceral bullying with superpowers → secret power reveal in first 30s. World-specific: powers as bullying tools in military academy. +- **Beat count:** 6 major beats +- **Cliffhanger:** Dread-forward binary collapse — survive OR stay hidden. No clean exit. + +| Metric | Value | +|--------|-------| +| CPI | $4.22 | +| CPM | $17.56 | +| 3s Play | 32.35% | +| Thruplay | 15.29% | +| Q1 | 17.85% | +| Q2 | 86.49% | +| Q3 | 89.58% | +| Q4 | 84.88% | +| Completion | 3.8% | +| CTR | 1.35% | +| CTI | 30% | + +**IM Profile:** 7 IMs (3-gate pass), 7 distinct flavors, zero deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Erin's entrance | Freezes Rex's arm mid-swing, crowd parts, single finger snap shatters ice | Power-Ceiling Reveal | 2 | ice-powers | +| Weapon Selection | Weapons reject Quinn — sword shatters, flail floats. Audience discovers "weapons choose their wielders" | Institutional Depth | 1 | sentient-objects | +| Gauntlets bond | Bloodbound Gauntlets — 100% compatibility. "The former owner wasn't exactly human." | System/Artifact Discovery | 1 | ancient-artifact | +| Erin one-shot | Tiny Erin drops the giant in one move — size contrast, effort contrast | Power-Ceiling Reveal | 2 | speed/size-contrast | +| Quinn catches spear | Catches Loop's spear mid-thrust, cracks it in half | Status Inversion | 2 | impossible-catch | +| Leo's spear throw | Casual flick embeds broken spear in wall, cuts Rex's cheek | Power-Ceiling Reveal | 2 | surgical-precision | +| Quinn's reveal | Steps in front of Erin, absorbs both spells. Eyes red, full vampiric powers. World shifts from "hidden vampire" to "what happens when he stops hiding" | Status Inversion | 1 | vampiric-reveal | + +**Key takeaways:** Highest CTI tested (30%). Flattest Q2–Q4 curve. Nearly 1:1 IM-to-beat ratio with every flavor distinct — this is the template for IM execution. Q4 dips slightly (84.88%) — possible dread-forward binary creates slight fatigue vs hunger-forward cliffhanger (compare Dragon Battle Q4: 95.34%). + +--- + +## Dragon Battle (FLBM — Karl) + +- **Engine:** Self-Sacrifice / Loyalty +- **Shape:** Event-based (Beast Master Battle) +- **Opening:** Weakest beasts mocked → immediate emotional anchor (beasts chose Karl). World-specific: beast master academy where creatures define rank. +- **Beat count:** ~15 major scenes +- **Cliffhanger:** Hunger-forward — Princess reveals "A legendary dragon only bonds with royal blood. So what makes you so special?" + +| Metric | Value | +|--------|-------| +| CPI | $3.64 | +| CPM | $16.11 | +| 3s Play | 38.64% | +| Thruplay | 16.77% | +| Q1 | 11.61% | +| Q2 | 81.69% | +| Q3 | 98.56% | +| Q4 | 95.34% | +| Completion | 3.44% | +| CTR | 1.87% | +| CTI | 23.86% | +| 0-95% | 8.91% | + +**IM Profile:** 7 IMs (3-gate pass), 6 distinct flavors, zero deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Cave Lion | Lion buries Karl like a litter box on Kruger's command | Power-Ceiling Reveal | 2 | creature-command | +| Princess arrives | Princess on WilderBear — royal entrance, generous beast donation | World Border | 2 | royal-entrance | +| Scalix as hair dryer | Prince uses legendary dragon to blow-dry his hair. Mythic creature in mundane humiliation. | Power-Ceiling Reveal | 2 | dragon-as-domestic | +| Hawk's feather | Hawk's razor feather draws blood from the dragon — shouldn't be possible | Status Inversion | 2 | feather-draws-blood | +| Rae on Scalix | Tiny spider on dragon's face causes misfire — size contrast | Status Inversion | 2 | tiny-vs-mythic | +| Dragon speaks | Scalix refuses master, speaks telepathically to everyone. Beasts have consciousness and moral judgment. | Institutional Depth | 1 | telepathic-refusal | +| Princess reveals lineage | "A legendary dragon only bonds with royal blood. So what makes you so special?" | World Border | 1 | hidden-royalty | + +**Key takeaways:** Best overall retention curve. Q3 at 98.56% is near-perfect — compounding sacrifice + dragon battle locks the audience. Hunger-forward cliffhanger sustains Q4 at 95.34%. Dragon-as-hairstylist IM is notably effective — mythic creature in a mundane, humiliating context. Every IM passes the fun gate. + +--- + +> ⚠️ **OFF-ESSENCE — DO NOT IMITATE THE "CLOUD" FRAMING (WBT HARD BLOCK 8).** The WBT entries below (*Spore Cloud*, *Rotting Boy*) are legacy shipped promos. Their **titles and metrics are valid history and stay as recorded.** But their beat descriptions personify Ren's spore as a named companion beast — "Cloud" — that activates mushrooms, leads to the flower, evolves, and acts as the "IM delivery vehicle." **Per WBT canon there is no character named Cloud; the spore is a fused, near-inert fungus and the empathy bond is Ren ↔ his parents.** Treat every "Cloud does X" beat below as a deprecated pattern: read the metrics, do **not** copy the spore-as-character structure into new WBT work. + +## Spore Cloud (WBT — Ren) + +- **Engine:** Self-Sacrifice / Loyalty + Underdog Awakening hybrid +- **Shape:** Journey-based (ceremony → home → forest → mantis → pit → ruins → bloom) +- **Opening:** Hatching ceremony — every egg is a lottery ticket. Ren's is gray and expired-looking. Family sold everything for it. +- **Beat count:** ~18 scenes +- **Cliffhanger:** Hunger-forward transformation — Ren swallows the flower, vision shifts to blueprint mode. "For the first time, I wasn't afraid. I just wanted to know what I'd turn into." + +| Metric | Value | +|--------|-------| +| CPI | $5.84 | +| CPM | $14.44 | +| 3s Play | 33.96% | +| Thruplay | 9.81% | +| Q1 | 7.53% | +| Q2 | 84.76% | +| Q3 | 89.91% | +| Q4 | 97.8% | +| Completion | 2.01% | +| CTR | 1.13% | +| CTI | 21.31% | +| 0-95% | 5.91% | + +**IM Profile:** 6 IMs (3-gate pass), 6 distinct flavors, no deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Hatching ceremony | Students transform physically — wings, claws, armored limbs, golden scales. Ren gets glowing mushrooms from his head. | Institutional Depth | 1 | hatching-transformation | +| Mushroom hypnosis | Cloud activates Ren's mushrooms — they emit the exact light pattern the Mirror Mantis uses to entrance prey. Deadliest predator freezes. | Status Inversion | 2 | mushroom-hypnosis | +| Fungal network path | Cloud touches forest floor — bioluminescent threads spread like a web, revealing a hidden path through the ancient root system | System/Artifact Discovery | 1 | bioluminescent-network | +| Blue spore colony | Ancient runes peel off chamber walls, merge mid-air into massive blue Spore Cloud that destroys the Mantis. Ancient defense system, still functioning. | World Border | 1 | ancient-rune-colony | +| Cloud leads to flower | After Ren tells Cloud to leave, Cloud refuses — hovers ahead, waiting. Leads Ren to the exact location of the Half-Flower. The "useless" beast knew the whole time. | System/Artifact Discovery | 2 | beast-knows-the-way | +| Transformation | Ren swallows flower — vision shifts to blueprint mode. Bones, instincts, weaknesses displayed like a computer interface. Something ancient fusing with his blood. | System/Artifact Discovery | 1 | system-awakening | + +**Key takeaways:** Strongest validation of journey-based promos. Third-best CTI tested (21.31%). Best Q4 tested (97.8%) — audience accelerates to the end. Each new environment in the journey is a natural IM opportunity — the world expands with every location change. Cloud IS the IM delivery vehicle. Every Tier 1 moment is Cloud doing something impossible. + +--- + +## Rotting Boy (WBT — Ren) + +- **Engine:** Self-Sacrifice / Loyalty +- **Shape:** Event-based (academy → Bloom Race) +- **Opening:** "My beast was pinned and I was bleeding in front of the whole class." Mid-crisis, world-specific. +- **Beat count:** ~16 scenes +- **Cliffhanger:** Hunger-forward — Cloud evolves massively. "He's more powerful than the Sabertooth!" Professor removes glasses in wonder. +- **Note:** Q1+TN format — drops from full GenAI images to thumbnail at Q2. Q2 metric reflects format change, not structural failure. + +| Metric | Value | +|--------|-------| +| CPI | $5.80 | +| CPM | $10.90 | +| 3s Play | 36.17% | +| Thruplay | 16% | +| Q1 | 11% | +| Q2 | 54.57% ⚠️ (TN transition) | +| Q3 | 90.75% | +| Q4 | 103% (skip-ahead) | +| Completion | 2.06% | +| CTR | 1.09% | +| CTI | 17.99% | + +**IM Profile:** 5 IMs (3-gate pass), 5 distinct flavors, no deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Tiger offer | Emerald Tiger in a cage, offered to weakest student. Sign the paper, give up Cloud, become the strongest overnight. | Institutional Depth | 2 | caged-tiger-offer | +| Bloom Race | Mana flower in deepest forest, blossoms once a year under full moon, amplifies evolution through ancient root networks | Institutional Depth | 2 | moonlit-bloom-ceremony | +| Fungal network path | Cloud touches forest floor — bioluminescent threads light up roots and mushrooms, revealing a hidden navigation system | System/Artifact Discovery | 1 | bioluminescent-network | +| Forest feeds Cloud | After Cloud goes dark, fungal spores rise from every tree root. The entire ancient network converges its energy into the weakest beast on record. | World Border | 1 | forest-feeds-evolution | +| Cloud's evolution | Cloud grows massive, fills clearing, blazes with ancient light. Professor Brant removes glasses: "More powerful than the Sabertooth." | Status Inversion | 1 | spore-becomes-colossus | + +**Key takeaways:** Same show/engine as Spore Cloud, different container (event-based vs journey). Q4 at 103% means audience skips ahead — mid-section may have a drag point. Q3→Q4 recovery is the strongest tested. Validates that Cloud is the IM vehicle for this IP. IM density lower than Spore Cloud (5 vs 6) with one fewer Tier 1 (3 vs 4), correlating with lower CTI (17.99% vs 21.31%) — though TN format makes clean comparison impossible. + +**Critical execution lesson:** Two scripts from this same beat sheet produced 19% vs 12% CTI. Same IM events. Script 1 let moments unfold through discovery (silence before, space after). Script 2 narrated moments from above (announced significance, explained mechanics). IM quality depends on SPACE around the moment. + +--- + +## Live Action 2.0 (MVS — Quinn) + +- **Engine:** Underdog Awakening / Progression +- **Shape:** Journey-based (school → bus → academy → assessment) +- **Opening:** Powerless kid, ability book won't open, ticking clock (military pickup in 2 hours). +- **Beat count:** 20+ scenes +- **Cliffhanger:** Hunger-forward transformation reveal — full Vampire System unlocks, faces Rylie. + +| Metric | Value | +|--------|-------| +| CPI | $3.41 | +| CPM | $11.41 | +| Thruplay | 20% | +| Q1 | 10.64% | +| Q2 | 60.3% ⚠️ | +| Q3 | 88.7% | +| Q4 | 89.35% | +| Completion | 2.27% | +| CTR | 1.63% | +| CTI | 19.96% | + +**IM Profile:** 4 IMs (3-gate pass), 4 flavors. Mid-section IM desert (quest-loop beats between book opening and diagnostic test). + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Book opens | Blood activates the book — red flashes, ancient runes, system uploading. The thing that never worked is finally working. | System/Artifact Discovery | 1 | blood-activation | +| System upload | Digital interface floods Quinn's vision — HP, levels, quests. A gamified power system living inside his head. | System/Artifact Discovery | 1 | system-upload-UI | +| Assessment arena | Holographic Dalki materialize, cadets fight with ice wings, teleportation, metal bodies. The power ceiling of this world on display. | Power-Ceiling Reveal | 2 | holographic-arena | +| Shadow blades | Dark energy forms at Quinn's fingertips — small enough to hide, lethal enough to kill. His first real offensive power. | Status Inversion | 2 | shadow-blades | + +**Key takeaways:** Lowest CPI tested ($3.41) — "powerless kid" is instantly accessible. Q2 drops to 60.3% because Quinn opens the ability book at ~25-30%, resolving the opening question. Q3/Q4 recover once quest loop re-engages. The book opening is the strongest IM — promos WITH it outperform counterparts without. + +--- + +## Chamber of Secrets (Strongest Warlock — Ethan) + +- **Engine:** Underdog Awakening / Progression (Chosen One variant) +- **Shape:** Journey-based (train → academy → sorting → dungeon → dragon) +- **Opening:** Voiceover hook — "I gripped the white sword tighter as my dragon roared beneath me." Then flashback. +- **Beat count:** ~12 major scenes +- **Cliffhanger:** Hunger-forward — mounted on dragon, chased by own academy. "In sixty seconds I'd either become the most powerful wizard in history or die as the greatest traitor." + +| Metric | Value | +|--------|-------| +| CPI | $7.69 | +| CPM | $16.63 | +| 3s Play | 36.74% | +| Thruplay | 15.70% | +| Q1 | 11.77% | +| Q2 | 65.50% | +| Q3 | 85.50% | +| Q4 | 77.68% | +| Completion | 1.88% | +| CTR | 1.61% | +| CTI | 13.22% | +| 0-95% | 5.12% | + +**IM Profile:** ~5 IMs (3-gate pass), 4 distinct flavors. Narrator-heavy execution may be suffocating moments. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Dragon sighting | Massive red dragon the size of a Boeing flies alongside train. Looks directly at Ethan through the glass. | Power-Ceiling Reveal | 2 | dragon-sighting | +| Sorting stone speaks | Stone goes silent for everyone — then speaks privately to Ethan. Calls him Chosen One, last heir of an extinct bloodline. | System/Artifact Discovery | 1 | stone-speaks-privately | +| Pillar announcement | Sorted into worst house AND declared a Pillar (future leader). The contradiction silences the room. | Institutional Depth | 2 | contradiction-reveal | +| Golden energy eruption | Ethan catches the Necromancer's blade with bare hands — golden energy erupts from skin. The supposed Dud shatters a centuries-old weapon. | Status Inversion | 1 | golden-bare-hands | +| Dragon wakes and speaks | Dragon opens eyes like gold suns, speaks: "I have waited centuries for your arrival." Reveals Ethan is last heir of the first wizards. | World Border | 1 | dragon-prophecy | + +**Key takeaways:** CPI above $6 target. CTI at 13.22% is just above floor — may benefit from fresh-audience advantage (new show). Q4 at 77.68% is the weakest tested — audience drops off in the final quarter. Narrator-heavy script with significant exposition explains system mechanics rather than letting audience discover them. Several IM candidates are told rather than shown (sorting stone's private speech is narrated, not experienced). The dragon-on-train moment works because it's purely visual, but dungeon sequence drowns in narrator explanation. + +--- + +## Forged Through Pain (FTP — Zane) + +- **Engine:** Revenge / Justice Denied (with Godforge progression) +- **Shape:** Event-based (Family Training Day arena) +- **Opening:** Voiceover — "Every man who's ever hit me has made me more dangerous." Uncle poisons father at feast. +- **Beat count:** ~18 scenes +- **Cliffhanger:** Hunger-forward — Zane absorbs Andrew's power into his own fist. Purple energy on his knuckles. "It was time the punching bag punched back." + +| Metric | Value | +|--------|-------| +| CPI | $27.38 | +| CPM | $14.69 | +| 3s Play | 33.69% | +| Thruplay | 14.57% | +| Q1 | 15.29% | +| Q2 | 77.60% | +| Q3 | 72.48% | +| Q4 | 94.44% | +| Completion | 2.74% | +| CTR | 1.48% | +| CTI | 3.70% | +| 0-95% | 8.12% | + +**IM Profile:** 1–2 IMs (3-gate pass), 1 flavor. Severe IM deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Godforge discovery | Gold foil disintegrates into skin. Voice: "Transform flesh into forge, body into weapon." | System/Artifact Discovery | 1 | gold-foil-absorption | +| (Borderline) Power absorption | Zane absorbs Andrew's purple energy into his own fist at the cliffhanger | Status Inversion | 2 | energy-absorption | + +All other power moments (Shadow Fist, shockwave stomp, purple aura) are flavor duplicates of "energy channeling + physical impact." + +**IM Deserts:** Beats 3–8 (entire prison/training sequence), Beats 10–14 (arena combat). Majority of promo has no functioning IMs. + +**Key takeaways:** CONTROL CASE for the IM hypothesis. $27.38 CPI is worst tested by a wide margin. Structurally tight — strong BECAUSE chain, effective injustice engine, good escalation, strong completion (2.74%). Terrible CTI (3.70%). The throughline works. The world doesn't expand. Every power display uses the same visual vocabulary (purple energy + force). World feels contained: one castle, one family, one arena. Skyreach Sect, Infernal Peak, Aether Crystals are name-dropped but never shown functioning. Note: the low CTI may reflect IM execution failure rather than engine failure — a revenge promo with strong IM density is untested. + +--- + +## Fists of Fire (FLBM — Aiden/Karl) + +- **Engine:** Underdog Awakening / Revenge (cultivator variant) +- **Shape:** Journey-based (test → exile → tavern → training → Gauntlet) +- **Opening:** Sensei karate-chops a classmate, then challenges Aiden — fail and get exiled. Max sabotages with a pebble. Public humiliation + rigged system in first 30s. +- **Beat count:** ~16 scenes +- **Cliffhanger:** Hunger-forward — Aiden vs Cheryl (ex-girlfriend) as final Gauntlet match. Fire powers unstable. Multiple open questions (Wes's true agenda, what's living in Aiden's flame). +- **Note:** Not working bottom-funnel despite acceptable CPI/CPS. + +| Metric | Value | +|--------|-------| +| CPI | $5.00 | +| CPS | $20.00 | +| 3s Play | 40.9% | +| Thruplay | 21.19% | +| Q1 | 16.99% | +| Q2 | 81% | +| Q3 | 87.15% | +| Q4 | 93.66% | +| True Completion | 4.6% | +| CTR | 1.95% | +| CTI | 14.29% | + +**IM Profile:** 2–3 IMs (3-gate pass), 2 distinct flavors. Significant IM deserts in training montage and Gauntlet combat. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Tavern heat | Aiden's fists glow red, beer boils and explodes, room temperature climbs — first power manifestation | System/Artifact Discovery | 2 | heat-manifestation | +| Wes unmasked | Masked stranger is the crazy bartender. Cultivator class revealed as rare mythical martial art | Status Inversion | 2 | bartender-is-cultivator | +| Pebble reversal | Aiden uses Max's own sabotage trick to trip him. Poetic justice through the exact weapon that ruined him | Status Inversion | 2 | pebble-reversal | + +All other fire moments (training chops, lava immersion, Gauntlet punches) are flavor duplicates of "fists glow red + heat." The fire power never varies in kind — only in intensity. + +**IM Deserts:** Training montage (trees, rocks, lava whirlpool — all same-flavor physical training). Gauntlet combat (martial arts without world-expansion). The only IM in the second half is the pebble reversal, which is satisfying but doesn't expand the world. + +**Key takeaways:** Second proof case (after FTP) that strong throughline + monochrome IM profile = good completion, weak CTI. Injustice engine is working — Max's sabotage, Cheryl's betrayal, Sensei's rigged system, coin lost in storm drain — but the world never surprises the audience past the cultivator reveal. Every power beat is "heat, but more." Q1 is the strongest in this batch (16.99%), likely driven by the sabotage-exile sequence landing hard. The 14.29% CTI with 4.6% True Completion confirms the two-layer model: completion is a throughline metric (this script's throughline is solid), CTI is an IM metric (this script's IMs are sparse and monochrome). Not working bottom-funnel — may also reflect show fidelity issues (fabricated cultivator system, invented Gauntlet tournament, Wes doesn't exist in source). + +--- + +## FLBM Weapons Adaptation (FLBM — Karl) + +- **Engine:** Self-Sacrifice / Loyalty (adapted from MVS Weapons) +- **Shape:** Event-based (Upgrade Day → Tournament → Bond Completion) +- **Opening:** Sergeant Rita demands Karl trade Hawk for Mech Falcon. Karl refuses. Bond loyalty established in first 30s with immediate institutional pressure. +- **Beat count:** ~12 major scenes +- **Cliffhanger:** Hunger-forward — Hawk evolved, Karl has shared powers, Kruger and Mech Falcon charging. Battle about to begin with the power dynamic inverted. + +| Metric | Value | +|--------|-------| +| CPI | $3.78 | +| CPS | $14.08 | +| 3s Play | 48.79% | +| Thruplay | 16.76% | +| Q1 | 11.89% | +| Q2 | 82.57% | +| Q3 | 91.19% | +| Q4 | 99.89% | +| True Completion | 4.36% | +| CTR | 1.79% | +| CTI | 20% | + +**IM Profile:** 4 IMs (3-gate pass), 3–4 distinct flavors. No major deserts but IM density is lower than MVS Weapons original (7 IMs, 7 flavors → 4 IMs, 3–4 flavors). + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Eagle Eyes in combat | Hawk spots real Edgar from above — guides Karl's punch to the one real clone. The "useless" power is the only one that works. | Status Inversion | 2 | aerial-spotting | +| Kruger takes Mech Falcon | The upgrade Karl refused becomes the weapon aimed at him. Evil mirror match — Karl's loyalty choice weaponized against him. | Institutional Depth | 2 | mirror-match | +| Bond 100% / Hawk evolves | Light explosion, thunderclap, Hawk transforms — scruffy feathers to electric shimmer. New skill trees branch open. | System/Artifact Discovery | 1 | bond-evolution | +| Bond Share | Karl gains Eagle Eyes — sees through Kruger's invisibility. Powers are now one. The bond IS the power system. | Status Inversion | 1 | shared-powers | + +**Key takeaways:** Validates that Self-Sacrifice engine transplants across IPs — $3.78 CPI and 20% CTI on an untested show is strong. BUT: 10-point CTI gap vs MVS Weapons original (30% → 20%) is explained by IM density and variety. MVS Weapons had 7 IMs with 7 distinct flavors (ice-powers, sentient-objects, ancient-artifact, speed-contrast, impossible-catch, surgical-precision, vampiric-reveal). This adaptation has 4 IMs with system-notification flavor overlap (Eagle Eyes unlock, Bond 100%, Bond Share are all "system activates + power gained"). The world expands less. Thruplay (16.76%) is weakest in the new batch — the opening (refusing an upgrade) is lower-stakes than romantic betrayal or treason. Q4 at 99.89% is the best tested — hunger-forward cliffhanger with the power dynamic freshly inverted holds perfectly. CTR (1.79%) is the weakest in the batch — the cliffhanger is exciting but the questions it opens (will they win the fight?) are less novel than "he powers up by KISSING?" or "what's Lucien's price?" + +--- + +## Smack (SW — Ethan) + +- **Engine:** Underdog Awakening (with Forbidden Power / Secret Identity hybrid) +- **Shape:** Journey-based (carnival → farm → train → academy → sorting → Dud Manor → power activation) +- **Opening:** Girlfriend kissing another guy at the carnival in front of the whole town. "In a world where everyone could do magic, I couldn't even do a card trick." Romantic betrayal + powerlessness identity in 10 seconds. +- **Beat count:** ~18 scenes +- **Cliffhanger:** Question-multiplier — Chloe kisses Ethan, power erupts, crowd reacts: "He powers up by KISSING?!" Opens five new questions at the threshold. + +| Metric | Value | +|--------|-------| +| CPI | $4.76 | +| CPS | $11.45 | +| 3s Play | 52.53% | +| Thruplay | 23.86% | +| Q1 | 12.58% | +| Q2 | 85% | +| Q3 | 84.36% | +| Q4 | 98.69% | +| True Completion | 4.68% | +| CTR | 2.2% | +| CTI | 17.2% | + +**IM Profile:** 5–6 IMs (3-gate pass), 5 distinct flavors, no deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Train ticket validation | Buzzes red twice — crowd laughs. Third scan: green + a crest. Conductor's hands tremble. Everyone evacuated from the corridor. | Institutional Depth | 1 | legacy-ticket | +| Bracelet from locked drawer | Held in trust since before the conductor took his post. Old velvet pouch. Metal warm and pulsing. "Does anyone else know you have this ticket?" | System/Artifact Discovery | 1 | mysterious-bracelet | +| Dragon over academy | Red dragon soars overhead, wings block out the sun. Fire leaks from jaws. Every student rushes to windows. | Power-Ceiling Reveal | 2 | dragon-sighting | +| Sorting Stone displays | Each student's sorting produces a different spectacle — black flames, four-tailed fox, twin fire-and-water dragons. Ethan's stone: silence, then the faintest spark. "A Dud!" | Institutional Depth | 2 | sorting-ceremony | +| Chloe's kiss → power eruption | Kiss activates bracelet. Blue-white light pours from skin, eyes, hands. Burns heal. Feet lift off ground. The forbidden mechanic revealed through taboo action. | Status Inversion | 1 | kiss-activation | + +**Key takeaways:** SOLVES the Underdog Awakening Q2 problem. Live Action 2.0 hit 60.3% Q2 because Quinn opens the ability book at ~25-30% and the question resolves. Smack hits 85% Q2 because Ethan STILL CAN'T DO MAGIC through the sorting, the Dud Manor assignment, and the Langston beatdown. The central question ("does this kid have any power at all?") stays open for ~85% of the runtime. Power activation is held to the final moments and the activation MULTIPLIES questions rather than answering them — "he powers up by KISSING?!" is not a resolution, it's a new engine. 25-point Q2 improvement over MVS Awakening on the same structural chassis. + +The opening hook (52.53% 3-sec, 23.86% Thruplay) validates romantic betrayal + powerless identity as a top-of-funnel structural template. Universally legible — no world context needed to feel the humiliation. The train sequence generates two consecutive Tier 1 IMs with zero flavor overlap (ticket validation → bracelet), which is a lesson in IM compression: institutional environments with built-in ceremonies/protocols are natural IM generators. + +Q3 dip (84.36%) is the one structural weakness — the Langston beatdown in Dud Manor is long and the injustice is high but the IM density drops. The beatdown is all same-flavor punishment (fire blast, ice spell, force blast — three spells, same emotional register: "they hit him"). Could benefit from an IM in the Dud Manor sequence — a world-expanding moment between the Langston attacks. + +CTR at 2.2% confirms: cliffhangers that open NEW questions outperform cliffhangers that resolve existing ones. Five open questions at the CTA (What power? What will Langston do? What happens with Chloe? What happens when he kisses someone ELSE? What is the bracelet?). + +**Broad structural lesson:** The Underdog Awakening Q2 fix is generalizable beyond this show. The principle: **delay power activation as long as structurally possible, and when activation arrives, make it create more questions than it answers.** The activation should be confusing, taboo, or paradoxical — not triumphant. Triumph closes; confusion opens. + +--- + +## Phoenix Compression (TSS — Serena) + +- **Engine:** Underdog Awakening / Revenge (with Secret Power hybrid — Lucien as hidden system) +- **Shape:** Journey-based (trial → room → heist → Lava Valley → demon beast → phoenix nest) +- **Opening:** "My grandfather was about to hang me for treason. Funny thing is — my family are the ones who murdered my parents and stole my magic." Injustice + identity in one sentence. Fourteen, magicless, chained, surrounded by the family that killed her parents. +- **Beat count:** ~14 major scenes +- **Cliffhanger:** Question-multiplier — Phoenix egg hatching, remaining seals flaring with pain, cousins racing to the egg, Serena can't stand. More open questions at the cliffhanger than at any prior point. + +| Metric | Value | +|--------|-------| +| CPI | $3.65 | +| CPS | $15.42 | +| 3s Play | 55.59% | +| Thruplay | 24.72% | +| Q1 | 13.79% | +| Q2 | 75.71% | +| Q3 | 85.26% | +| Q4 | 99.12% | +| True Completion | 4.9% | +| CTR | 2.16% | +| CTI | 22% | + +**IM Profile:** 5–6 IMs (3-gate pass), 5 distinct flavors, zero deserts. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Lucien appears | Face and mouth manifest on Serena's palm. Grating voice: "Someone who's been inside you for a very long time." She slaps her own hand — the face reappears on her neck. | World Border | 1 | parasitic-entity | +| First seal break | Phoenix crest pressed to forearm, bracelet blazes white-hot, something CRACKS inside her chest. Small flame conjured. "This drop of magic was all I had left of my parents." | System/Artifact Discovery | 1 | seal-shatter | +| Clara falls into her own fire | Serena's tiny spark trips Clara. The fire mage stumbles into her own flames. Eyebrows seared off. "You… you have magic?" | Status Inversion | 2 | fire-backfire | +| Alaric's betrayal | The only kind cousin — the one who gave her armor — reveals: "If you managed to break the first seal, we can't let you break the rest… the truth must remain buried." Shatters armor. | Institutional Depth | 1 | deep-conspiracy | +| Second seal break from the valley itself | No demon core needed — the Lava Valley's heat IS the key. "The fire recognized me. Obeyed me." The thing that was killing her becomes her power source. | System/Artifact Discovery | 1 | elemental-allegiance | +| Phoenix egg hatching | Six-foot crystal shell. Fractures split across it. Brilliant light pours from cracks. The Celestial Phoenix choosing its heir — while Serena's remaining seals flare with pain. | World Border | 1 | celestial-hatching | + +**Key takeaways:** Best top-of-funnel in the batch (55.59% 3-sec, 24.72% Thruplay) and tied for best CTI (22%). The opening line is the most efficient tested — two sentences establish identity (fourteen, magicless, chained), injustice (family murdered her parents), and stakes (about to be hanged). Zero world-building needed. The audience is IN IT before they know the system. + +The script's structural innovation is that **each progression step unlocks a different DOMAIN**, not more of the same domain. First seal = small flame (basic magic). Second seal = elemental allegiance (the environment itself responds). Lucien's face = parasitic entity (body horror). Alaric's betrayal = institutional conspiracy (the world is deeper than it looked). Phoenix hatching = mythic creature (cosmic scale). Each IM tastes completely different from the last — zero flavor duplication across the entire runtime. + +**Broad structural lesson (generalizable):** Any Underdog Awakening or progression show can generate natural IM flavor variety if each power-up stage changes the DOMAIN of what's possible rather than the DEGREE. "Fire, but bigger" is one flavor repeated. "Fire → environmental control → parasitic entity → institutional conspiracy → mythic creature bonding" is five flavors. This applies to beast evolution stages, system level-ups with branching trees, seal/lock progressions, or any framework where the protagonist gains power in stages. The test: does each new stage make the audience revise their model of what kind of world this is? + +Q2 (75.71%) is the weakest in the batch — the midnight heist and first seal break may partially resolve the opening question ("will she get magic?"). The answer is yes at ~30% of runtime. The Q2 holds better than MVS Awakening (60.3%) because the first seal only gives a tiny spark — it's a partial answer that raises new questions (what's Lucien's price? what happens with the other six seals?). But it's weaker than Smack's 85% where the question stays fully open. Lesson: even partial resolution costs Q2 points, but question-multiplying partial resolution costs fewer than clean resolution. + +Q4 at 99.12% is near-perfect — the cliffhanger opens more questions than the entire third act started with (phoenix choosing, seals flaring, Alaric's conspiracy, Lucien's price, remaining five seals). This is the question-multiplier cliffhanger at maximum effectiveness. + +--- + +## Level Vampire + Weapons Merge (MVS — Quinn) + +- **Engine:** Secret Identity (with Underdog Awakening opening) +- **Shape:** Merge format — Level Zero opening (school → ruined house → book activation) spliced into Weapons structure (academy → weapon selection → duels → hallway confrontation) +- **Opening:** "In three seconds, the prettiest girl in school would be dead." Quinn saves Layla from invisible speedster, gets punched by Rex. Powerless kid in a superpowered world. Action-first with protagonist agency from the first line. +- **Beat count:** ~20+ scenes (longest in batch) +- **Cliffhanger:** Reveal — Quinn steps in front of Layla, absorbs both spells. Eyes red. Full vampiric powers on display. ⚠️ Resolution cliffhanger — the secret breaks rather than almost breaking. +- **Note:** This is a merge of two proven structures. The Level Zero opening runs through book activation, then the script transitions into the Weapons framework (academy processing → weapon selection → duels). Metrics reflect the combined structure. + +| Metric | Value | +|--------|-------| +| CPI | $3.03 | +| 3s Play | 45.81% | +| Thruplay | 26.13% | +| Q1 | 12.15% | +| Q2 | 72% | +| Q3 | 86.72% | +| Q4 | 82.95% | +| True Completion | 2.88% | +| CTR | 2.51% | +| CTI | 20.8% | + +**IM Profile:** 6–7 IMs (3-gate pass), 6 distinct flavors. Strong density and variety — inherits IM structure from Weapons. + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Book activation | Blood dripped onto cover — it drinks the blood in. Fangs glow. Pages turn impossibly fast. Ancient text Quinn somehow understands. | System/Artifact Discovery | 1 | blood-book | +| Vampire System voice | "Congratulations, Quinn Talen. You have been granted the Vampire System." Cold, mechanical. The forbidden thing activated. | System/Artifact Discovery | 1 | forbidden-system | +| Scanner bypass | Biometric arch reads every student's powers. Quinn steps through — "Ability type: Unclassified. Threat level: None." System flickers: "Forbidden signature masked." | Institutional Depth | 2 | scan-evasion | +| Weapons reject Quinn / Gauntlets bond | Sword shatters. Flail floats weightless. Then: black gauntlets, jagged like dragon claws. "Compatibility: One Hundred Percent." "The former owner wasn't exactly human." | System/Artifact Discovery | 1 | sentient-weapons | +| Quinn catches spear, cracks it | Catches Loop's spear mid-thrust, snaps it in half with a single clawed punch. A weapon that should have been indestructible. | Status Inversion | 2 | impossible-catch | +| Loop's accusation | "He's got powers! He's been hiding them! I bet these abilities are illegal!" — the detection danger escalates from suspicion to public accusation. | Institutional Depth | 2 | public-accusation | +| Full vampiric reveal | Quinn absorbs both spells. Eyes red. Hair wild. System: "Full Vampiric Powers Activated. Rage Mode Engaged." The secret breaks. | Status Inversion | 1 | vampiric-reveal | + +**Key takeaways:** Best CPI in the batch ($3.03) and best CTR (2.51%). Best Thruplay tested across all promos (26.13%). The merge format works — the Level Zero opening provides an accessible emotional entry (powerless kid, dead parents, bullies) and the Weapons structure provides the IM-dense institutional event container. + +⚠️ **Q4 collapse (82.95%) is the structural red flag.** The cliffhanger delivers the vampiric reveal — the secret breaks, powers are on full display. This is a RESOLUTION cliffhanger, not a threshold cliffhanger. Compare: Weapons original (dread-forward binary, Q4: 84.88%), Dragon Battle (hunger-forward mystery, Q4: 95.34%), TSS Phoenix (question-multiplier, Q4: 99.12%). The data pattern is now clear across multiple promos: resolution cliffhangers produce lower Q4 than threshold or question-multiplier cliffhangers. The audience gets the payoff they were waiting for and the urgency to install drops. + +**Q2 (72%) is also a concern** — the book activation at ~20-25% partially resolves the "will he get powers?" question. This is the same structural problem as Live Action 2.0 (60.3% Q2), though less severe because the Vampire System activation creates new questions (forbidden, hunted) that partially sustain tension. + +**True Completion (2.88%) is the lowest in the batch** despite the longest runtime. The merge format may create a pacing valley at the splice point where the narrative has to re-establish stakes in the academy setting. + +**Merge-specific lesson:** The Level Zero→Weapons splice works for CPI and CTR (the opening provides accessible emotion, the institutional event provides IM density). But the merge creates TWO potential resolution points (book opening AND vampiric reveal) that both cost retention. A merge that delays its first resolution point further would protect Q2. And a merge that ends at threshold rather than reveal would protect Q4. + +--- + +# BOTTOM-FUNNEL FAILURES + +These promos achieved acceptable top-funnel metrics (CPI, engagement) but failed to convert listeners into paying users downstream. The common thread: the promo's central promise did not match what the listener found in the show. Logged here as cautionary data — see the Show Fidelity checks (W1/W2 exit gates and `bucketing.md` Show Fidelity Gate) for the structural rules derived from these failures. + +## Juno (FLBM — Karl) + +- **Engine:** Bond / Pack Loyalty +- **Shape:** Journey-based (Karl + invented wolf pup Juno travel to Moonstone Grove) +- **Failure Type:** Character fabrication — false promise (§8.2). Juno, the Emperor, the Alpha Bond, the corrupted chimera, and the elite hunters do not exist in the source material. The entire emotional core is a fabricated character. A listener who installs to see Karl and Juno's bond grow will never find Juno. + +| Metric | Value | +|--------|-------| +| CPI | $3.50 | +| CPM | $17.68 | +| 3s Play | 42.55% | +| Thruplay | 23.73% | +| True Completion | 5.07% | +| Q1/TP | 29.71% | +| CTR | 2.12% | +| CTI | 22.50% | +| 0–25% | 82.37% (strong) | +| 25–50% | 85.25% | +| 50–75% | 0.01% (cliff) | +| 0–95% | 11.91% | + +**Bottom-funnel result:** Strong top-funnel. Cheap CPI, good CTI. Retention cliff at Q3 (0.01%) suggests structural collapse mid-promo, but the fundamental bottom-funnel problem is the false promise — the listener installs for a character that doesn't exist. + +**Lesson:** A fabricated character that becomes the emotional core is the worst form of show fidelity failure. The promo functions as a standalone story but fails as an acquisition tool. + +--- + +## Boneclaw — Thor version (FLBM — Karl) + +- **Engine:** Bond / Pack Loyalty +- **Shape:** Journey-based (Karl bonds and protects Thor) +- **Failure Type:** Entry window violation (§8.3). Thor is a real character but enters the show at ~Ch 60+. The listener installs to see the Karl-Thor bond develop. They must survive ~60 chapters of Karl + Hawk before encountering what hooked them. + +| Metric | Value | +|--------|-------| +| CPI | $3.30 | +| CPM | $12.82 | +| 3s Play | 41.99% | +| Thruplay | 21.11% | +| True Completion | 4.29% | +| Q1/TP | 30.32% | +| CTR | 1.64% | +| CTI | 26.29% | +| 0–25% | 81.29% (strong) | +| 25–50% | 87.36% | +| 50–75% | 94.25% | +| 0–95% | 10.20% | + +**Bottom-funnel result:** Cheapest CPI in the set. Strong retention curve. Good CTI. But the listener enters the show expecting Thor and finds only Hawk for dozens of episodes. The gap between promise and delivery causes churn before the payoff arrives. + +**Lesson:** Real characters outside the entry window create the same downstream failure as fabricated characters — the listener can't find what hooked them quickly enough. Anchor promos on characters the listener meets in their first ~10–20 episodes. + +--- + +## Boneclaw — Cat version (MVS — Quinn) + +- **Engine:** Bond / Pack Loyalty (displaced from Secret Identity) +- **Shape:** Journey-based (Quinn and Boneclaw in a vampire clan war) +- **Failure Type:** Compound — HARD BLOCK violation + setting mismatch (§8.4). Quinn operates openly as a vampire inside a vampire clan. The HARD BLOCKS explicitly state: Quinn cannot be in a world where he is revealed as a vampire or openly uses vampire abilities. The setting (vampire clan military base, clan war) bears no resemblance to the military academy the listener enters. Additionally, Boneclaw the cat and the Talen Clan war do not appear in the first 100 episodes. + +| Metric | Value | +|--------|-------| +| CPI | $5.80 | +| CPM | $15.34 | +| 3s Play | 49.87% | +| Thruplay | 26.80% | +| True Completion | 5.67% | +| Q1/TP | 46.22% | +| CTR | 2.11% | +| CTI | 9.39% | +| 0–25% | 78.80% | +| 25–50% | 90.09% | +| 50–75% | 64.47% (collapse) | +| 0–95% | 11.37% | + +**Bottom-funnel result:** Near-target CPI but the highest in this set. Low CTI (9.39%) — the worst of the four. The promo abandons MVS's proven Secret Identity engine entirely. Q3 collapse (64.47%) indicates structural problems mid-promo. The listener installs expecting a vampire clan war and finds a military academy with a kid hiding that he's a vampire. Complete world mismatch. + +**Lesson:** HARD BLOCK violations are not just canon errors — they're bottom-funnel killers. The HARD BLOCKS exist because they define the listener's entry experience. Violating them means the promo promises a show that doesn't exist at the entry point. Also: MVS's Secret Identity engine is proven at $4.22 CPI / 30% CTI. Abandoning it for an untested engine without structural justification is a performance risk. + +--- + +## Descendant (MVS — Quinn) + +- **Engine:** None clean — hybrid of Underdog Awakening and fabricated power fantasy +- **Shape:** Journey-based (Quinn descends into fabricated underground vampire palace) +- **Failure Type:** Compound — HARD BLOCK violation + scenario fabrication + setting mismatch (§8.2, §8.4). Quinn openly uses vampire abilities. The underground palace, Arthur as a living antagonist, the "Godslayer Level" unlock, and the possessed-friends scenario are all fabricated. The setting (ancient underground throne room) has zero relationship to the military academy. Characters are mostly real (Fex, Layla, Vorden, Peter, Sia) but placed in a fabricated scenario that becomes the promise. + +| Metric | Value | +|--------|-------| +| CPI | $4.34 | +| CPM | $17.16 | +| 3s Play | 40.25% | +| Thruplay | 20.24% | +| True Completion | 5.45% | +| Q1/TP | 38.72% | +| CTR | 2.62% | +| CTI | 15.70% | +| 0–25% | 82.68% (strong) | +| 25–50% | 85.34% | +| 50–75% | 98.57% | +| 0–95% | 13.54% | + +**Bottom-funnel result:** Decent CPI, acceptable CTI, strong retention through Q3. This is the most deceptive failure — the metrics look workable. But the listener installs expecting an underground vampire king confrontation and finds a military academy with wristwatch power levels. The scenario is pure fabrication. The fabricated scenario IS the promise (the cliffhanger makes the listener hungry for the Godslayer power unlock), so despite using real characters, the bottom-funnel gap is severe. + +**Lesson:** Using real characters in a fabricated scenario can still be a false promise if the scenario becomes the hook. The Fabrication Litmus Test (§8.2) applies: if you remove the fabricated palace and Arthur, does the promo still have an emotional core? No — it collapses entirely. The fabricated scenario IS the promise. Also demonstrates that acceptable top-funnel metrics do not guarantee bottom-funnel success. + +--- + +# PATTERN OBSERVATIONS + +## What correlates with CPI < $6 + +All top performers achieve sub-$6 CPI: +- Immediate crisis opening — protagonist in conflict within 10 seconds +- Protagonist identity hookable cold: "powerless kid," "secretly the strongest," "weakest beasts" +- Persistent human antagonist from Beat 1 +- World-specific setting detail in opening (power level wristwatch, superpowered gymnasium, beast master academy, hatching ceremony) +- Romantic betrayal + powerless identity opening (TSS: $3.65, SW: $4.76) — universally legible, no world context needed +- Merge formats that combine accessible emotional opening with IM-dense institutional event (Level Vampire: $3.03 — best CPI tested) + +## What correlates with high Thruplay (>15%) + +- Strong opening emotional anchor (bullying that's SPECIFIC, not generic) +- Genre signal within 10 seconds (superpowers visible, beasts visible, system UI visible) +- **Romantic betrayal + identity humiliation is a Thruplay accelerator.** TSS (24.72%) and SW (23.86%) both use this opening shape. Level Vampire (26.13% — best tested) combines "powerless kid saves the girl, gets punched" with dead-parents emotional weight. The pattern: universal-emotion hooks that require zero world context to feel, combined with a power-world signal that promises escalation. +- **Thruplay floor correlates with opening stakes magnitude.** FLBM Weapons (16.76% — weakest in batch) opens with Karl refusing an upgrade. The stakes are institutional (lose your weapon choice) rather than existential (exile, death, treason). Compare TSS (treason trial, execution) at 24.72%. The higher the personal cost visible in the first 30 seconds, the higher the Thruplay. + +## What correlates with retention collapse at Q2 + +Mid-promo tension resolution. The opening question gets a clean answer. Now validated across 9 promos: + +| Promo | Resolution Point | Q2 | +|-------|-----------------|-----| +| Live Action 2.0 | Book opens at ~25-30%. Clean answer. | 60.3% | +| Level Vampire merge | Book opens at ~20-25%. Partial (forbidden powers add questions). | 72% | +| TSS Phoenix | First seal breaks at ~30%. Partial (tiny spark, six seals remain). | 75.71% | +| FLBM Fists of Fire | Powers emerge in tavern ~25%. Partial (control unclear, Wes mystery opens). | 81% | +| Dragon Battle | Never resolves. | 81.69% | +| FLBM Weapons | Never resolves (Karl stays weak until final moments). | 82.57% | +| Spore Cloud | Never resolves. | 84.76% | +| SW Smack | Never resolves (Ethan still powerless through sorting and beatdown). | 85% | +| Weapons (OG) | Never resolves. | 86.49% | + +**Three tiers of Q2 health are now visible:** +- **Clean resolution (60-72% Q2):** The opening question gets a definitive answer. Live Action 2.0, Level Vampire. +- **Partial resolution with question multiplication (75-81% Q2):** The answer is incomplete and generates new questions. TSS Phoenix (one seal of seven), Fists of Fire (uncontrolled power). +- **No resolution (81-86% Q2):** The question stays fully open. All top Q2 performers. + +**The fix for Underdog Awakening's Q2 problem is now proven.** SW Smack (85% Q2) delays power activation to the final moments. When activation arrives, it creates more questions than it answers ("He powers up by KISSING?!"). This is a 25-point Q2 improvement over Live Action 2.0 on the same engine. + +**Generalizable principle:** Delay power activation as long as structurally possible. When activation arrives, make it confusing, taboo, or paradoxical — not triumphant. Triumph closes; confusion opens. If partial activation is needed before 50%, ensure each power-up opens at least two new questions for every one it answers. + +## What correlates with strong Q3/Q4 (>88%) + +- Non-resolving central question (all top performers) +- Compounding stakes — each beat raises the ceiling +- Anticipation beat earned by throughline, not luck or rescue + +**Q4 is now strongly correlated with cliffhanger type:** + +| Cliffhanger Type | Example | Q4 | +|-----------------|---------|-----| +| Question-multiplier (more open Qs at end than start of final third) | TSS Phoenix | 99.12% | +| Question-multiplier (power activation creates new mystery) | SW Smack | 98.69% | +| Hunger-forward (bond evolution, new power dynamic) | FLBM Weapons | 99.89% | +| Hunger-forward mystery | Dragon Battle | 95.34% | +| Hunger-forward transformation | Spore Cloud | 97.8% | +| Hunger-forward (ex-girlfriend final match, fire unstable) | Fists of Fire | 93.66% | +| Dread-forward binary | Weapons (OG) | 84.88% | +| Resolution (secret breaks, full power on display) | Level Vampire | 82.95% | + +**The pattern is now clear:** Question-multiplier and hunger-forward cliffhangers hold Q4 above 93%. Resolution cliffhangers — where the audience gets the payoff they were waiting for — produce the weakest Q4 (82-85%). The principle: the cliffhanger must open MORE territory than it closes. If the audience's primary question is answered at the cliffhanger, the urgency to install drops. Resolution withholding (CLAUDE.md → Resolution withholding; `voice_style.md` §5) is empirically validated across 8 promos. + +## What correlates with high CTI (>19%) + +**IM density is the strongest predictor of CTI on scaled shows.** Updated with five new promos: + +| Promo | IMs (3-gate) | Flavors | Deserts | CTI | +|-------|:---:|:---:|:---:|:---:| +| Weapons (OG) | 7 | 7 distinct | None | 30% | +| Dragon Battle | 7 | 6 distinct | None | 23.86% | +| TSS Phoenix | 5–6 | 5 distinct | None | 22% | +| Spore Cloud | 6 | 6 distinct | None | 21.31% | +| Level Vampire merge | 6–7 | 6 distinct | None | 20.8% | +| FLBM Weapons | 4 | 3–4 distinct | None | 20% | +| Live Action 2.0 | 4 | 4 distinct | Mid-section | 19.96% | +| Rotting Boy | 5 | 5 distinct | None | 17.99% | +| SW Smack | 5–6 | 5 distinct | Q3 (beatdown) | 17.2% | +| Fists of Fire | 2–3 | 2 distinct | Training + Gauntlet | 14.29% | +| Chamber of Secrets | ~5 | 4 distinct | None | 13.22% | +| Forged Through Pain | 1–2 | 1 (duplicates) | Majority | 3.70% | + +**Key insight:** Completion and CTI are driven by different structural layers. Completion = throughline mechanics. CTI = Impact Moments. A structurally perfect promo with no IMs will complete well and convert poorly. FTP is the proof case. Fists of Fire (4.6% True Completion, 14.29% CTI) is the second proof case — strong throughline, monochrome IMs, weak conversion. + +**Secondary insight:** IM count alone doesn't predict CTI — execution matters. Chamber of Secrets has ~5 IMs but many are narrator-explained rather than discovered. Rotting Boy's two scripts from the same beat sheet (19% vs 12% CTI) prove that space around the moment is as important as the moment itself. + +**Third insight (new):** Flavor variety may matter more than raw count. FLBM Weapons (4 IMs, 3-4 flavors, 20% CTI) outperforms SW Smack (5-6 IMs, 5 flavors, 17.2% CTI) despite fewer IMs — possibly because FLBM Weapons has zero IM deserts while Smack has a Q3 desert during the Langston beatdown. The combination of flavor variety AND even distribution (no deserts) appears to be the key driver. + +**Fourth insight (new — generalizable):** Progression systems that change DOMAIN at each step generate natural IM flavor variety. TSS Phoenix (22% CTI) never repeats a flavor: parasitic entity → seal-shatter → fire-backfire → deep-conspiracy → elemental-allegiance → celestial-hatching. Each progression stage makes the audience revise their model of what kind of world this is. In contrast, Fists of Fire (14.29% CTI) repeats the same domain (heat/fire) at every step. The principle: "each power-up should change what KIND of thing is possible, not how MUCH of the same thing is possible." Applies to beast evolutions, system level-ups, ability unlocks — any show with staged progression. + +## Cliffhanger type vs CTI and CTR + +| Type | Example | CTI | CTR | Q4 | +|------|---------|-----|-----|-----| +| Dread-forward binary | Weapons (OG) | 30% | 1.35% | 84.88% | +| Hunger-forward mystery | Dragon Battle | 23.86% | 1.87% | 95.34% | +| Question-multiplier (seal flare + phoenix hatch) | TSS Phoenix | 22% | 2.16% | 99.12% | +| Hunger-forward transformation | Spore Cloud | 21.31% | 1.13% | 97.8% | +| Resolution (full vampiric reveal) | Level Vampire | 20.8% | 2.51% | 82.95% | +| Hunger-forward (bond evolution) | FLBM Weapons | 20% | 1.79% | 99.89% | +| Hunger-forward transformation | Live Action 2.0 | 19.96% | 1.63% | 89.35% | +| Question-multiplier (kiss → "he powers up by KISSING?!") | SW Smack | 17.2% | 2.2% | 98.69% | +| Hunger-forward (ex-girlfriend match) | Fists of Fire | 14.29% | 1.95% | 93.66% | + +**Observations (updated):** +- Dread-forward binary still drives the highest CTI (30%). Install urgency from "survive OR stay hidden" is the strongest conversion mechanism tested. Sample size still small (n=1). +- **Question-multiplier cliffhangers drive the highest CTR (>2.1%) AND highest Q4 (>98%).** They open new territory rather than closing existing territory. The audience clicks to answer NEW questions, not to see the resolution of old ones. +- **Resolution cliffhangers produce the best CTR (2.51%) but the worst Q4 (82.95%).** This is a paradox worth studying: the reveal creates strong click-through urgency ("what happens now that his secret is out?") but the emotional payoff has already been delivered, so Q4 drops because the audience feels partially satisfied before they click. The install may be driven by curiosity rather than hunger. +- **CTR and Q4 appear to be in tension when the cliffhanger resolves.** The ideal cliffhanger delivers NEITHER satisfaction NOR closure — it opens a door the audience didn't know existed. + +## IM three-gate quality distribution + +- **Gate 1 (Sticky) failures:** Generic power displays, standard cultivation auras, unnamed techniques, list-based reveals. +- **Gate 2 (Fun) failures:** Poisonings, betrayals, torture — vivid and memorable but dark. Good for throughline, not IMs. +- **Gate 3 (Distinct) failures:** Multiple IMs using the same visual vocabulary. Each tastes the same; world stops expanding after the first. + +**Gate 3 failures (flavor duplication) are the most common and most damaging to CTI.** A promo with 5 IMs that all taste the same functions like a promo with 1 IM. + +## What correlates with bottom-funnel failure (Show Fidelity) + +Four promos achieved acceptable-to-strong top-funnel metrics but failed bottom-funnel — the listeners installed but did not convert to paying users because the promo's promise didn't match their experience of the show. + +| Promo | CPI | CTI | Failure Type | +|-------|-----|-----|-------------| +| Juno (FLBM) | $3.50 | 22.50% | Character fabrication — invented wolf pup IS the emotional core | +| Boneclaw/Thor (FLBM) | $3.30 | 26.29% | Entry window — Thor enters ~Ch 60+, listener finds only Hawk | +| Boneclaw/Cat (MVS) | $5.80 | 9.39% | HARD BLOCK + setting mismatch — open vampire in clan war vs. academy | +| Descendant (MVS) | $4.34 | 15.70% | Scenario fabrication + HARD BLOCK + setting mismatch | + +**Key insight:** Top-funnel metrics cannot detect bottom-funnel failures. A $3.30 CPI with 26% CTI looks like a winner — until the listener enters the show and can't find what hooked them. CPI measures whether the promo works as entertainment. Bottom-funnel measures whether the promo works as an acquisition tool for THIS SPECIFIC SHOW. + +**Common failure patterns:** +- Fabricated characters that become the emotional core (Juno) — listener installs for a character that doesn't exist +- Real characters outside the entry window (Thor) — listener installs for a bond they won't encounter for dozens of episodes +- Setting mismatch (Boneclaw/Cat, Descendant) — listener enters expecting one world and finds another +- HARD BLOCK violations (Boneclaw/Cat, Descendant) — promo shows the protagonist in a state the listener won't encounter at entry +- Abandoned proven engines (Boneclaw/Cat — dropped Secret Identity for untested Bond/Pack Loyalty on MVS) + +**The Fabrication Litmus Test:** For any invented element, ask: "If I remove this, does the promo still have an emotional core?" If no — the invented element IS the promise, and it must exist in the source material. + +--- + +# OPENING HOOK PERFORMANCE + +Performance data from tested cold opens. Two structural shapes — voiceover hook (protagonist frames stakes) and dialogue-first (dropped into crisis mid-exchange). + +| Open | 3s Play | Thruplay | Type | Notes | +|------|---------|----------|------|-------| +| "They turned me into their towel boy..." | 74% | 26.07% | Voiceover | Status reversal. | +| "Mercenaries burned my unit alive..." | 70% | 42.7% | Voiceover | Highest thruplay — action + mystery + escalation within 50 words. | +| "You're infected?" | 66% | 27.57% | Dialogue-first | World reveals through conversation. | +| "A fat glob of bird droppings..." | 66% | 26.92% | Voiceover | Visceral physical image. | +| "There is a name for people who are reincarnated..." | 62% | 24.49% | Voiceover | Expository — weakest voiceover form. | +| "You're nothing but gutter trash!" | 60.86% | 33.16% | Dialogue-first | Strong thruplay from "I was about to save his life" mystery. | +| "The most beautiful, dangerous girl..." | 60.5% | 23.34% | Voiceover | Narrator summary — tells instead of shows. Weakest. | +| "My grandfather was about to hang me for treason..." | 55.59% | 24.72% | Voiceover | Best new batch. Injustice + identity + stakes in two sentences. Zero world context needed. | +| "My girlfriend was kissing another guy..." | 52.53% | 23.86% | Voiceover | Romantic betrayal + powerless identity. Universal-emotion anchor. | +| "My Sensei karate-chopped my classmate so hard..." | 40.9% | 21.19% | Voiceover | Action-first but protagonist is observer, not victim. Weaker identity anchor. | +| "Oh god, she's going to get hit!" / "In three seconds..." | 45.81% | 26.13% | Voiceover | Action + protagonist agency. Best thruplay in batch — immediate physicality + dead parents subtext. | +| "You have five seconds to hand that bird over..." | 48.79% | 16.76% | Dialogue-first | Institutional pressure. Stakes are weapon choice, not survival — lower Thruplay. | +| "Shut it down! Shut it down now!" | 48.67% | 19.39% | In-media-res | Ambient chaos without protagonist voice. | +| **Average (all promos)** | **44%** | **17.5%** | | | + +**New pattern (from batch 2):** The two strongest 3-sec opens in the new batch (TSS 55.59%, SW 52.53%) share a structure: **protagonist as the victim of injustice in the first sentence, with the injustice requiring zero world context to understand.** "My grandfather was about to hang me for treason" — no fantasy knowledge needed. "My girlfriend was kissing another guy" — universally legible. Compare FLBM Weapons at 48.79% where the opening requires understanding what beast masters and mech falcons are. **The less world context the opening demands, the higher the 3-sec play rate.** This aligns with §1's Emotional Sufficiency Principle: cold traffic converts on emotional mechanics, not system mechanics. + +**What the data shows:** +- Opens that put the audience inside a specific person's situation in the first 10 words outperform ambient chaos without a protagonist anchor. +- Strongest 3s play: identity-based hooks where protagonist's status has been inverted ("towel boy," "they left me breathing"). Listener immediately understands who they WERE vs who they ARE. +- Strongest thruplay: hooks that combine identity with immediate escalation within 50 words. The 42.7% thruplay is nearly 2.5x average. +- Weakest: exposition opens ("There is a name for people who...") and narrator-summary opens ("The most beautiful, dangerous girl..."). Both tell the audience what to think rather than putting them inside a situation. +- Dialogue-first opens perform well on thruplay when the exchange contains mystery or contradiction ("You're infected?" / "I was about to save his life"). + +--- + +# ADDING NEW PROMO DATA + +When a promo ships, add an entry following this format: + +``` +## [Promo Name] ([Series] — [Protagonist]) + +- **Engine:** [Engine name] +- **Shape:** [Event-based / Journey-based] +- **Opening:** [One sentence — what the audience sees in 10 seconds] +- **Beat count:** [X] +- **Cliffhanger:** [Type — hunger/dread + one sentence description] + +| Metric | Value | +|--------|-------| +| CPI | | +| CPM | | +| 3s Play | | +| Thruplay | | +| Q1–Q4 | | +| Completion | | +| CTR | | +| CTI | | + +**IM Profile:** + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| + +**Key takeaways:** [2–3 sentences — what this promo teaches] +``` + +Update Pattern Observations if the new data confirms, contradicts, or extends an existing observation. Add new opening hooks to the Opening Hook Performance table when tested. + +--- + +# DOCUMENT REFERENCES + +This file is empirical data ONLY. +For structural rules: the workflow files (W1–W5) and CLAUDE.md. +For engine definitions: **Hook Engine Library** +For writing execution: **Writing Style** \ No newline at end of file diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/powerstart.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/powerstart.md new file mode 100644 index 0000000..62bf2c1 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/powerstart.md @@ -0,0 +1,226 @@ +# ============================================================ +# POWERSTART — 3-Second Scroll-Stop Generation +# STATUS: SKILL — Generates 5 candidate opening lines from a locked beat sheet / promo draft +# LOAD: When Workflow 4 reaches Step 1 (Scene 1 opening), or when Workflow 5 is auditing a promo's hook. +# ============================================================ + +## Purpose + +A powerstart is the first thing a cold listener hears on paid social. Its one job is to stop a thumb mid-scroll in under 3 seconds — and plant a question violent enough to pull the listener past second 3 into the promo. + +This skill generates 5 candidate powerstart lines aimed at one metric: **3-second play rate.** + +--- + +## Input + +- The locked beat sheet or finished promo draft +- The **Primary Driver Thread** — one sentence describing the core tension +- Any known HARD BLOCKS from the series world file + +## Output + +Five candidate lines, numbered, no commentary. 4 of 5 must be first-person narration voice. The 5th may use any voice. The operator picks one and returns to the calling workflow. + +--- + +## Core Objective + +3 seconds. The RIGHT cold thumb stops. + +The powerstart has two jobs: + +1. **Stop the scroll** — earn 3 seconds of attention on paid social. +2. **Select for the audience** — the listeners who stop should be the listeners who will convert for THIS show. A 66% play rate with perfect audience selection beats a 74% with broad/wrong selection on CPI. + +3-second play rate is necessary but not sufficient. A line that maximizes raw play rate by rugpulling — stopping scrolls for an audience that will never install — is a CPI disaster. The powerstart must set up the primary conflict and signal the emotional territory of the show, not just shock. + +**The promo shifts to third-person narration after the powerstart.** The powerstart is a first-person vocal burst. Once the scroll is stopped, narration shifts to third person for the remainder. Proven strategy. The powerstart's voice rules apply ONLY to the powerstart. + +--- + +## The 3-Second Gate + +Primary framework. Every candidate must pass all three checks before any other evaluation. + +### Check 1: The 5-Word Parse + +Can a brain process words 1–5 and have an emotional reaction — outrage, disgust, shock, curiosity, disbelief? + +**If words 1–5 don't trigger a gut reaction, nothing downstream saves the line.** + +### Check 2: Vocal Proximity + +Does the line sound like someone grabbed your arm at a bar and started talking? Or like the opening sentence of a novel? + +First-person spoken voice outperforms narrated voice by 10–15 points. 4 of 5 candidates must be first-person. + +### Check 3: The Tense Gate + +Has the worst thing already happened, or is it about to happen? + +Post-rupture (past tense, damage done) outperforms pre-rupture (future/conditional) by 8–12 points. Delivered violence stops scrolls. Promised violence gets evaluated. + +The tense gate is a ranking tool, not a hard ban. Some pre-rupture lines work. But when choosing between two candidates of similar strength, post-rupture wins. + +--- + +## The 6 Scroll-Stop Patterns + +Lenses on what gut reaction the line is buying in 3 seconds. Not categories to assign mechanically. + +**1. Identity Inversion** — who someone WAS vs. what they've BECOME. The gap is the hook. The brain processes status hierarchies instantly. + +**2. Accomplished Violence** — something extreme, specific, and irreversible has already been done. The brain doesn't evaluate — it reacts. The more specific and physical, the faster the reaction. + +**3. Behavioral Contradiction** — a person does something that makes no sense. "Why would anyone do that?" Pure involuntary curiosity. No injustice, violence, or betrayal needed. + +**4. Intimate Betrayal** — someone who should protect the protagonist has already destroyed them. The closer the relationship, the stronger the hook. The WHO matters more than the WHAT. + +**5. Institutional Horror** — a system or place is casually monstrous. The gap between institutional normalcy and actual horror. Primary wild-card pattern — often works without first-person voice. Use for the 5th slot. + +**6. Forbidden Revelation / Power Rupture** — a secret surfaces, a body changes, a truth detonates. Most vulnerable to jargon failure. If the reveal requires system knowledge to be shocking, it won't stop a scroll. + +Craft note on reveals: they should SNAP, not SUMMARIZE. "He hadn't been drunk in twenty years" → snap. "He had been pretending to be a drunk for twenty years" → summary. Same fact, different gravity. + +Craft note on secrets: the rupture verb for a secret is NOT the hypothetical exposure ("if they find out" = conditional, no rupture). It's either the moment the secret nearly breaks (near-exposure event) or the moment the secret's cost becomes visible (what hiding it has already cost). "If they find out I have a dragon, they'll burn me alive" (48%) is conditional math. The secret hasn't ruptured. Find the moment it almost did, or find what keeping it has already destroyed — start there. + +--- + +## Selection Rule + +Pick the earliest moment in the promo that combines: **5-word gut punch + clear stakes + genre signal + forward pull.** + +Scene 1 > Scene 2 > earlier beats > later. But Scene 1 is not mandatory — if the real viral image lives deeper, pull it forward. Across a batch of 5, at least two candidates should be grounded in Scene 1. + +--- + +## Hard Bans + +- **Third-person voice in slots 1–4** +- **"Was about to" / conditional future in words 1–7** +- **Retrospective timestamps** ("when I was 14," "that day") +- **Soft state-openers in words 1–3** (I was / I had / I held / I watched / They say) +- **Condition/state openers** ("I was born with," "I grew up") — states get filed, events stop scrolls +- **Observer protagonist** ("my classmate," not "me") +- **Adjective-loading** ("cruel stepmother," "brutally smacked") — if you need adjectives to make the violence register, replace the image +- **Exposition, jargon, cliché, mush** +- **Protagonist boasting** — vulnerability > competence for 3-second play rate +- **Setup-punchline delay** — if the scroll-stop requires holding a setup in memory, the line is broken for social +- **"But I made one mistake" and variants** — overused, empty forward-pull with no image + +--- + +## Temperature Bars + +1. *"That's interesting."* — scroll-neutral. **Draft.** Not a candidate. +2. *"This is already out of control."* — scroll-stop. **Checkpoint.** Not a candidate yet. +3. *"Something has already gone too far."* — install-grade. **Ship bar.** + +Bar 2 is where the generator is most tempted to stop. Every bar-2 line gets one more push. + +--- + +## Generation Process + +### The Core Problem This Process Solves + +The natural instinct is to APPROACH the moment — set up the sacrifice, frame the significance, build to the betrayal. This produces sacrifice-first lines, framing openers, and mid-event onsets. + +**The fix: find the moment, then delete everything before it. Start in the wreckage, not on the road to the wreckage.** + +--- + +**Step 1 — Find the 3–5 strongest RUPTURE POINTS.** + +A rupture point is the specific instant where something becomes irreversible — the swallow, the punch, the departure, the reveal. For each, write the AFTERMATH in 3–5 words. Not what happened — what the world looks like one second after. + +**Step 2 — Write each line starting INSIDE the aftermath.** + +1. Take the aftermath fragment. +2. First person, spoken voice. +3. The first 5 words must be INSIDE the aftermath. + +**The rupture verb test:** find the first verb in your line. Is it the rupture itself? + +- ✗ *"I crawled through frozen hills…"* — "crawled" is sacrifice. Rupture is 15 words away. +- ✗ *"I gave her the only thing that could save my life…"* — "gave" is setup. Rupture is a clause away. +- ✓ *"She swallowed my herb"* — "swallowed" IS the rupture. Line starts in the wreckage. +- ✓ *"They turned me into their towel boy"* — "turned" IS the rupture. +- ✓ *"Mercenaries burned my unit alive"* — "burned" IS the rupture. + +**If the first verb is not the rupture itself, delete everything before the rupture verb and begin there.** + +**Step 2b — Add a worsening beat (if earned).** The beat must make the first clause MORE painful, unjust, irreversible, or dangerous. Not extend, explain, or atmosphere. One beat is usually enough. Two max. Three stacks information instead of escalating. + +**Step 2c — Run the 3-Second Gate.** 5-word parse → vocal proximity → tense gate. + +**Step 3 — Batch review.** 4+ first-person? Pattern variety? Shape variety? Every line starts on a rupture verb? + +**Step 4 — Escalation pass.** Push each line one step past where it first feels shippable. Start later, add consequence, snap reveals, increase specificity, make outcomes irreversible. If it doesn't feel worse after the pass, discard. + +**The 10-show test:** Could this line belong to 10 other shows? If yes → push specificity. + +**Second-sentence check:** Beat 2 must WORSEN beat 1. Not extend, explain, or atmosphere. + +**Step 5 — Rank** via the priority hierarchy: 3-Second Gate > scroll-stop > genre signal > forward pull > cleanliness. + +**Step 6 — Output.** Five lines. Numbered. No commentary. + +--- + +## Performance Reference + +Study the data. Pattern-match against it. The patterns that separate 70%+ from 40% are visible in the lines themselves. + +**Average 3-second play rate across all promos: 40–45%.** Benchmarks: 65%+ = dominant (target), 55–64% = strong, 45–54% = average, below 45% = underperforming. + +| Line | 3s Play | What's driving the number | +|------|---------|--------------------------| +| "They turned me into their towel boy after I failed my genetic test! I used to be their captain." | 74% | Identity inversion, first-person spoken voice, zero world context, each sentence worsens | +| "Mercenaries burned my unit alive. But they made one mistake — they left me breathing." | 73.7% | Accomplished violence in 5 words, post-rupture, worsening beat adds revenge promise | +| "I walked right into the police station and yelled: 'I'm turning myself in!'" | 70% | Behavioral contradiction — nobody does this. Pure involuntary curiosity | +| "Five students die at Imperial Academy every year." | 67% | Institutional horror in one self-contained sentence. Exception: no first-person, still works | +| "A fat glob of bird droppings splattered across my face." | 66% | Max sensory specificity. "Fat glob" is doing all the work. No second beat needed | +| "Kira was only 2 hours old when she was stolen from her real mother." | 66% | Breaks two gate checks (3rd person, timestamp) — survives on extreme specificity + audience selection | +| "My grandfather was about to hang me for treason…" | 62% | Bar 3 content trapped behind "was about to" (pre-rupture). Tense gate cost ~6+ points | +| "My stepbrother poured boiling gold on my head when I was 14 years old." | 61.3% | Extreme image weakened by retrospective timestamp. Without "when I was 14" → 68%+ | +| "The hottest girl at my college was about to get ripped apart…" | 60.6% | Pre-rupture + narrator judgment ("hottest girl") + observer protagonist. Three gate failures | +| "The mech ejected my classmate into the ceiling." | 60.5% | Strong image, observer protagonist ("my classmate" not "me") | +| "My fiance left me while I was still bandaged from the fire." | 58.9% | Passive protagonist — lying still, being abandoned. Active degradation > passive abandonment | +| "Keira was born into wealth, but grew up eating food from dumpsters." | 58% | Condition, not event. Same show as Kira (66%) — "stolen" (act) vs. "born into" (state) = 8pts | +| "His girlfriend cheated on him. Bullies humiliated him." | 58% | Third person + list structure + mush closer ("grandmother's promise") | +| "Little Charlie hid inside a dumpster to escape the rain." | 55% | Sympathy play — no agent, no outrage. Sad ≠ scroll-stop | +| "The girl's own father kicked her off a cliff." | 54% | "The girl's" instead of "my" costs 7+ points of vocal proximity | +| "The day they decided who I'd marry… they made me watch someone die first." | 53.3% | Retrospective frame ("The day") gates bar-3 second clause. Rupture is "watch someone die" — should lead | +| "Oh god! she's going to get hit!" | 52% | Action + protagonist agency but pre-rupture | +| "Today was marked day. Every year in every district…" | 50% | Three sentences to deliver the hook. Compare "Five students die" (67%) — one sentence | +| "A guard shoved me with a rifle to the chest." | 49% | Generic agent ("a guard"), moderate violence (shove, not shoot) | +| "The girl's cruel stepmother fed her to hungry crocodiles when she was only 6." | 49% | Adjective-loading ("cruel," "hungry") + third person + timestamp. Extreme image buried | +| "I was born with poisonous silver spines, one touch could kill you." | 48% | Condition trap — "I was born with" is biography, not event | +| "If they find out I have a dragon… they'll burn me alive." | 48% | Conditional future ("if" + "they'll"). Secret as hypothetical math, not event | +| "I was only 7 when my cruel stepsister brutally smacked my face." | 47% | Adverb compensation ("brutally") for weak violence ("smacked"). Timestamp. Adjective label | +| "I grew up eating from the trash." | 45% | No agent, no event. Sympathy without outrage | +| "If I must marry, then let it be the ugliest…" | 43% | Contradiction buried under adjective stacking + conditional framing | +| "They chained the woman with irons in the middle of the castle courtyard." | 43% | Narrator voice, "the woman" = max distance. Specific image, no one to attach to | +| "The more they punched him, the more he smiled." | 43% | Third person, pattern observation instead of moment | +| "I want this bird!" The eight year old brat demanded… | 43% | Setup-punchline, scattered focus | +| "The most powerful dragon in the kingdom… chose a girl they were about to give away." | 42% | Narrator-summary + pre-rupture + observer protagonist. Strong concept buried | +| "Her sister tied her to a tree and poured honey all over her body." | 41% | Consequence (insects) requires inference — not self-evident at scroll speed | +| "The first time my father tried to break me… I was fourteen years old." | 41% | Retrospective frame + mush ("break me" = no image) + timestamp. Three hard bans | +| "He caught a superpowered punch... with his face." | 38% | Setup-punchline delay + third person + generic payoff | +| "I slayed countless goblins… but I made one mistake." | 36% | Boasting, jargon, cliché teaser. Every failure mode in one line | + +--- + +## When In Doubt + +Read the line aloud. Ask: *"Would you stop scrolling for this?"* + +Not "is this interesting?" Not "is this well-written?" Would you stop scrolling? + +--- + +## Handoff + +Output the 5 candidates. Operator selects one. The promo shifts to third-person narration after the opening. Skill ends at selection. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/reference_scripts.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/reference_scripts.md new file mode 100644 index 0000000..0e4cc9d --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/reference_scripts.md @@ -0,0 +1,322 @@ +# ============================================================ +# REFERENCE SCRIPTS +# STATUS: CALIBRATION MATERIAL — structural annotations of proven promos +# These are NOT full scripts. They are structural maps that show +# what good output looks like at beat, IM, and execution level. +# Full scripts are available as separate reference documents. +# ============================================================ + +--- + +# ANCHOR 1: WEAPONS (MVS — Quinn) + +**Why this is a reference:** The highest-performing promo tested. Non-origin, event-based, mid-series entry. Proves you can drop a cold audience into a world mid-stream with zero exposition. Peak IM density (7 IMs, 7 flavors, 30% CTI). Secret Identity engine at full power. + +**Promo type: FRESH TAKE.** This is not a compression of early episodes. Quinn does get gauntlets and goes to Weapon Training in the show, but this promo is an invention — it sells the world in a fundamentally different way than the source material presents it. The events are engineered for CPI, not adapted from a sequence of episodes. **Reference this when:** building an original angle that reimagines the world for cold traffic. + +## Promo Brief +- **Throughline:** Quinn must survive an academy of ability users while hiding that he's the thing they've spent centuries hunting — a vampire. +- **Dramatic Container:** Event-based — Weapon Selection ceremony → Arena Duel +- **Quest:** Survive weapon selection and the duel without exposing his vampire nature. +- **Antagonist:** Rex — Level Four bully with a crew, escalates from mockery to physical violence. +- **Stakes Character:** Erin — strongest student, protects Quinn before knowing him, forms bond through action. +- **Cliffhanger:** Dread-forward binary — Quinn activates full vampiric powers to save Erin. Secret exposed. Rex and Loop are watching. No clean exit. + +## Beat Map + +| Beat | Function | IM? | Punishment Type | +|------|----------|-----|-----------------| +| 1 | Rex and crew blast Quinn with energy attacks. System screams DRINK BLOOD OR DIE. Quinn refuses — one bite and he'd flatten them, but vampires are hunted and killed. He absorbs the beating. Rex spits: "Pathetic." | — | Social — public humiliation | +| 2 | Everyone goes silent. Rex's arm is frozen mid-swing. "It's the ice queen!" Erin cuts through the crowd, snaps her fingers, ice shatters. "Leave him alone." She doesn't comfort Quinn — tells him Weapon Selection starts in 10 minutes. Walks off. | IM: Erin's ice entrance — freezes a bully mid-swing, crowd parts, single finger snap shatters it (Power-Ceiling, T2, ice-powers) | — (rescue/bond) | +| 3 | Weapon Selection ceremony. Leo introduced — stout, hook hand, wild hair, eccentric legend. "If you don't KNOW it's right, it's WRONG." Quinn tries weapons: sword shatters in his grip, flail goes weightless and floats to the ceiling. Then finds the Bloodbound Gauntlets — 100% compatibility. Leo appears: "The former owner wasn't exactly... human." | IM: Weapons reject Quinn — try-fail, audience discovers weapons choose wielders (Institutional Depth, T1, sentient-objects). IM: Gauntlets bond + "not human" (System/Artifact, T1, ancient-artifact) | — (discovery) | +| 4 | Arena duels, no abilities. A massive student with a battle axe volunteers. Nobody wants to fight him. Erin sighs, steps forward: "I was hoping for a tougher opponent." Giant charges — Erin spins, slashes his legs, blade at his throat. "I yield!" So fast some students didn't even see it. Leo picks Quinn for next fight. Loop volunteers: "Little Miss Quinnie and I have a date." | IM: Erin one-shots the giant — size contrast, effort contrast, speed contrast. Giant charges, she barely moves. (Power-Ceiling, T2, speed/size-contrast) | Material — forced into combat | +| 5 | Quinn vs Loop. Holds back, absorbs hits, dodges ugly. Erin shouts coaching from sideline. Quinn catches the spear mid-thrust, cracks it in half, drops Loop with gauntlet strikes. Crowd goes silent. Leo hasn't blinked. | IM: Spear catch — Level One catches a Level Three's weapon mid-thrust and snaps it (Status Inversion, T2, impossible-catch) | — (anticipation moment) | +| 6 | Rex accuses Quinn of cheating. Students pile on. Leo defends: "I can guarantee no abilities were used." Leo flicks his wrist — broken spear embeds in the wall, thin red line on Rex's cheek. "There's still something to you, isn't there?" Then Loop notices Quinn's wounds have healed. Points: "He's not normal!" Attacks with lightning. Leo intervenes, sends Loop flying. Dismisses everyone. | IM: Leo's spear throw — casual flick from across the room, surgical precision (Power-Ceiling, T2, surgical-precision) | Social — accusation, exposure risk | +| 7 | Empty classroom. Erin confronts Quinn. "I'm an Original. Born with my powers." She thinks Quinn is the same. She's wrong — he's a vampire, the thing Originals have spent centuries hunting. Bond forms on a lie. "You need to be careful. Some people despise Originals." | — | Relational — bond on false premise | +| 8 | Hallway ambush. Rex and Loop corner them. Loop pins Quinn with electric stasis — same helplessness as Beat 1. They attack Erin. Her ice shield cracking. Quinn breaks free. Eyes red, hair wild. System: FULL VAMPIRIC POWERS ACTIVATED. Standing in front of Erin, holding back both spells like nothing. "Now you've really done it." | IM: Quinn's full reveal — the protagonist who absorbed every beating for 7 beats steps in front of the girl, powers fully unleashed, the world shifts from "academy with a hidden vampire" to "what happens when the most powerful thing in this world stops hiding" (Status Inversion, T1, vampiric-reveal) | Breaking point → anticipation → cliffhanger | + +## Key Execution Moments + +**The try-fail that teaches the world:** "Quinn picks up a sword — it shatters in his grip. Grabs a flail — it goes weightless, floats out of his hand." The audience discovers "weapons choose their wielders" without anyone stating the rule. This is the template for Institutional Depth IMs. + +**Antagonist dialogue that accumulates resentment:** Rex spits on Quinn while he's held in Loop's psychic grip. The audience doesn't just dislike Rex — they REMEMBER the specific moment. Surgical, not generic. + +**Bond through action, not warmth:** Erin's ice spike between Rex's legs. She doesn't comfort Quinn. She tells him to move. The bond is competence and protection, not sentiment. + +**The dual-layer engine:** Every beat after Beat 1 carries BOTH physical danger and detection danger simultaneously. When Quinn catches the spear, the physical win IS the detection risk. This is what makes the Secret Identity engine prevent pacing plateaus. + +## What This Script Does That Others Should Copy +- Zero exposition before crisis. The audience is in a fight by sentence two. +- Every IM uses a different flavor. Ice-powers, sentient objects, ancient artifacts, size contrast, impossible catch, surgical precision, vampiric reveal. Seven moments, seven vocabularies. +- The central question ("why would someone this powerful take this?") is planted in the first 10 seconds and never resolves. +- Context delivered as cargo: "Vampires are hated, considered monsters" lands inside a beat where Quinn is choosing not to fight back. The world-building IS the dramatic tension. +- The final beat IS a Tier 1 IM — Quinn stepping in front of Erin and absorbing both spells shifts the world from "academy with a secret" to "what happens when a vampire stops hiding." The audience's understanding of what's possible changes AND Quinn's trajectory is permanently altered. This is earned by every beaten-down beat before it. + +--- + +# ANCHOR 2: SPORE CLOUD (WBT — Ren) + +> ⚠️ **OFF-ESSENCE ANCHOR — REFERENCE THE STRUCTURE, NOT THE "CLOUD" CHARACTER (WBT HARD BLOCK 8).** This anchor's metrics and its journey-compression mechanism are valid. But its entire brief and beat map are built on a fabrication: a sentient companion beast named **"Cloud"** that nuzzles, shields, leads Ren to the flower, and serves as "bond object / stakes character / IM delivery vehicle." **WBT canon has no character named Cloud** — Ren's beast is a fused, near-inert spore (cosmetic hair-mushrooms), and the empathy bond is **Ren ↔ his parents**, not Ren ↔ a pet. When transferring from this anchor: take the *opening-compression* and *journey-as-world-expansion* craft only. Do **not** import the Cloud-as-bond-object structure — that is the exact spore-personification this system now hard-blocks. (Compare the W5 finding in `working files/documentation/WBT_SummitClimb_v1.md`, which flags spore-as-character/combat-power as HARD BLOCK breaks.) + +**Why this is a reference:** Strongest validation of journey-based promos. Opening compression done right. Third-best CTI (21.31%). Best Q4 (97.8%). Self-Sacrifice engine with the bond object as IM delivery vehicle. + +**Promo type: OPENING COMPRESSION.** This is the first ~6 episodes of WBT compressed into a single-day story. The IMs and vital beats from the source material are strung together to build a promo that feels true to the show's opening without much invention. Similar approach to Live Action 2.0 (MVS). **Reference this when:** compressing early episodes into a single promo, preserving the show's natural IM moments while engineering the connective tissue for CPI. + +## Promo Brief +- **Throughline:** Ren hatches the worst beast on record and refuses to give up on it — every choice to stay loyal costs him more, until the beast reveals it was never what anyone thought. +- **Dramatic Container:** Journey-based — hatching ceremony → home → forest → mantis → underground pit → ancient ruins → bloom +- **Quest:** Find the Half-Flower of the Heavens in the deadly forest to gain a second beast and save his family from poverty. +- **Antagonist:** Klein Goldcrest — peer who hatched a Crimson Salamander, mocks Ren publicly. (Note: Klein is less present than ideal for a human antagonist — the forest itself carries much of the threat. The engine compensates with the institutional antagonist layer: Ceremony Master, classmates, the system that declares Cloud worthless.) +- **Stakes Character:** Cloud — the Spore Cloud itself. Bond object whose safety drives every choice Ren makes. +- **Cliffhanger:** Hunger-forward transformation — Ren swallows the flower, vision shifts to blueprint mode. "For the first time, I wasn't afraid. I just wanted to know what I'd turn into." + +## Beat Map + +| Beat | Function | IM? | Punishment Type | +|------|----------|-----|-----------------| +| Hatching ceremony | Other students transform with wings, claws, golden scales. Ren's egg hatches a cloud of spores. Mushrooms sprout from his head. "Fungus freak!" | IM: Hatching transformations (Institutional Depth, T1) | Social — public humiliation | +| Ceremony Master verdict | "The worst beast there is. Doesn't evolve. Growth ceiling: none." Cloud understands what they're saying. | — | Material — future condemned | +| Home / surprise party | Parents threw a celebration. They see Cloud. Shock → forced smiles. Guilt hits Ren. "I doomed our family." | — | Emotional anchor — cost of failure | +| Parents' story | Father found a Half-Flower in the forest that cured mother's illness. Ren gets the idea: find another flower, gain the ability to tame a second beast. | — | Quest launch | +| Forest entry | Dark, dangerous. Cloud drifts close. Ren pushes deeper. | — | — | +| Mirror Mantis | Deadliest predator in the woods. Cloud activates Ren's mushrooms — they emit the mantis's own hypnosis pattern. The "useless" ability freezes the deadliest thing in the forest. | IM: Mushroom hypnosis (Status Inversion, T2) | Existential — almost dies | +| Pit trap | Mantis hooks Ren's leg. Both fall into underground chasm. Cloud follows into the dark. | — | Physical — trapped underground | +| Night Excavator | Second deadliest beast emerges. Mantis and Excavator fight. Ren grabs Cloud and escapes into tunnels. | — | Escalation — two lethal threats | +| Ancient ruins | Tunnels widen to smooth stone. Glowing runes. Cloud glows blue in response. Exactly as father described. "I found it, Cloud." | IM: Fungal network / bioluminescent path (System/Artifact, T1) | — | +| Blue spore colony | Runes peel off walls, merge into massive blue Spore Cloud. Destroys the mantis. Ancient defense system, still alive. | IM: Ancient colony (World Border, T1) | — | +| Colony turns on Ren | Blue spores start eating Ren's skin. Cloud creates protective barrier. Barrier breaking down. | — | Physical — being consumed | +| Cloud leads to flower | Ren tells Cloud to leave. Cloud refuses. Hovers ahead, waiting. Leads Ren to the Half-Flower. The "useless" beast knew the whole time. | IM: Cloud knows the way (System/Artifact, T2) | — | +| Transformation | Ren swallows flower. Vision shifts. Blueprint mode. Something ancient fusing with his blood. "I just wanted to know what I'd turn into." | IM: System awakening (System/Artifact, T1) | Cliffhanger | + +## Key Execution Moments + +**The tenderness beat that earns everything:** Cloud lands on Ren's shoulder and nestles against him. Mushrooms sprout. Ren laughs for the first time all day: "I'm not alone." This is the scroll-stopper in the Self-Sacrifice engine. Without it, the audience doesn't invest in the bond. + +**IM through contrast, not magnitude:** The mushroom hypnosis works because the "useless" ability does the ONE thing no powerful beast could do — freeze the deadliest predator using its own mechanism. The contrast between Cloud's perceived worthlessness and the actual result is what makes the friend say "wait, what?" + +**Journey structure earning IMs naturally:** Each new environment introduces a new world system — the forest's fungal network, the underground ruins, the ancient spore colony, the Half-Flower. The journey itself IS the world-expansion. + +**Show-don't-tell institutional depth:** The hatching ceremony doesn't explain how beast-bonding works — the audience watches students transform. Wings, claws, golden scales. Then Ren gets mushrooms. The rules are discovered through the spectacle of watching them play out. + +## What This Script Does That Others Should Copy +- Bond object as IM vehicle. Every Tier 1 moment is Cloud doing something impossible. The stakes character IS the world-expansion engine. +- Journey compression works when every location introduces a new world system. No task beats. No travel filler. Each transition is caused by the previous beat's outcome. +- The "useless thing is secretly the key" structure creates natural Tier 1 moments — each revelation about Cloud changes what the audience thinks is possible. +- Emotional escalation parallels physical escalation. Ren goes from "why did I hatch you" to "I'm putting my trust in you now." The bond grows INSIDE the crisis. + +--- + +# STRUCTURAL COMPARISON: ROTTING BOY vs SPORE CLOUD + +Same show, same engine, same protagonist, same beast — different containers and different results. + +| Dimension | Rotting Boy | Spore Cloud | +|-----------|-----------|-------------| +| **Shape** | Event-based (Academy → Bloom Race) | Journey-based (Ceremony → Forest → Ruins → Bloom) | +| **Opening** | Mid-crisis ("My beast was pinned and I was bleeding") | Ceremony ("Whatever hatched from my egg would determine my family's fate") | +| **IM Count** | 5 (3 T1, 2 T2) | 6 (4 T1, 2 T2) | +| **CTI** | 17.99% | 21.31% | +| **Q4** | 103% (skip-ahead) | 97.8% | +| **Antagonist** | Kai — present throughout, surgical dialogue | Klein — present early, then the forest carries threat | +| **Key difference** | Event structure concentrates IMs in institutional beats + climactic sequence | Journey structure spreads IMs across environments — each location is a new world system | + +**What this comparison teaches:** The journey-based version produces more natural IM opportunities because each new environment is a potential world-expansion moment. The event-based version has a stronger antagonist presence. Both work — the choice depends on whether the material's strongest escalation comes from phases within a single event or from movement through increasingly dangerous territory. + +--- + +# ANCHOR 3: DRAGON BATTLE (FLBM — Karl) + +**Why this is a reference:** Best overall retention curve tested. Q3 at 98.56%, Q4 at 95.34%. Self-Sacrifice engine at full power — every refusal costs more, every sacrifice compounds, the anticipation beat is earned entirely by the throughline. Proves the Self-Sacrifice engine is the most retention-stable architecture tested. Peak IM fun — every moment passes Gate 2. + +**Promo type: FRESH TAKE (with world-rule exception).** This promo is set in a world where everyone has beasts and beast battles are institutional events. **This is NOT the real FLBM world.** In the actual show, Karl is the ONLY person who has a bonded beast — that is the entire premise of the series title. Dragon Battle deliberately violates this HARD BLOCK. It worked, but it cannot be used as a template for "how FLBM promos should be set up." New FLBM promos must default to the real world rules: Karl is the only beast master, there are no beast tournaments, and other students do not have creatures. **Reference this for:** Self-Sacrifice engine structure, escalating cost principle, beast-as-stakes-character, hunger-forward cliffhanger construction — NOT for FLBM world-building. + +## Promo Brief +- **Throughline:** Karl refuses to abandon his weak beasts despite every reason to — each refusal costs more, until the thing he sacrificed for chooses him back. +- **Dramatic Container:** Event-based — Beast Master Battle (annual tournament with the Royal Prince) +- **Quest:** Survive the Beast Master Battle without sacrificing his beasts. +- **Antagonist:** Kruger — rich kid with gifted rare beasts, institutional privilege, bullies Karl publicly. Sergeant Rita as institutional enforcer. +- **Stakes Characters:** Hawk (baby thunderbird) and Rae (tiny spider) — both chose Karl. Their loyalty IS the emotional engine. +- **Cliffhanger:** Hunger-forward mystery — Princess reveals "A legendary dragon only bonds with royal blood. So what makes you so special?" + +## Beat Map + +| Beat | Function | IM? | Punishment Type | +|------|----------|-----|-----------------| +| Opening — Sergeant Rita | Flicks Karl's beasts over. "Cute will get you killed." Kruger slaps Karl: "Pathetic people deserve pathetic beasts! Go back to the mines." Class laughs. Karl helps his beasts back up. | — | Social — public humiliation | +| Hawk/Rae telepathy | Beasts send Karl a telepathic message: "Don't beat yourself up. You're special! That's why we chose you!" Karl smiles — while rich kids were gifted beasts, his chose him. | — | Emotional anchor — bond established | +| Princess arrives | Princess Nadia rides in on a WilderBear. Donates it to the school — insists it go to the weakest student. All eyes turn to Karl. | IM: Princess on WilderBear — royal entrance, generous beast donation to the weakest student (World Border, T2, royal-entrance) | — | +| The Offer | Princess: "Trade me your weakest beast and I will give you this bear." Karl freezes. Give up Hawk or Rae? A WilderBear would make him one of the most powerful at the academy. Everyone watching. | — | Moral — choose between bond and power | +| The Refusal | Karl: "I'm sorry, your Highness. But I can't give you either of my beasts." Gasps. Sergeant Rita hits him. Kruger shoves him aside: "I'll take your bear!" Kruger now even more powerful. Karl still weak. | — | Material — antagonist gains from protagonist's principle | +| Banned | Sergeant Rita grabs Karl: "You've embarrassed our school for the last time. You're banned from tonight's festivities!" Karl's one chance to prove himself — the Beast Master Battle — is taken from him. Beasts try to comfort him. | — | Material/Social — excluded from the event | +| Sneaking in | Karl sneaks into the stadium through the beast stables. Walks past legendary creatures. Stumbles into Scalix the Black Dragon's cavern. Dragon's maw inches from his face. Rae crawls across the dragon's head — Scalix flinches. Hawk calls from the exit. Karl could escape, but Rae is still on the dragon. He runs back for her. | IM: Scalix encounter — legendary dragon, terrifying, Karl's tiny spider makes it flinch (Power-Ceiling, T2, dragon-encounter). | Physical — almost killed | +| Name drawn | Karl's name is magically drawn from the Cup to fight Prince Magnus. Magical binding — his body walks into the arena against his will. Kruger and cronies rigged it. Laughter. No applause. | — | Social/Institutional — set up to fail | +| Prince + Scalix | Prince Magnus commands Scalix as a show of dominance — uses dragon to blow-dry his hair, warm his feet. The audience sees a legendary dragon used as a servant. The dragon's eyes show fury. | IM: Scalix as hair dryer — mythic creature in mundane humiliation. Legendary dragon reduced to domestic tool. (Power-Ceiling, T2, dragon-as-domestic) | — | +| Battle begins | Hawk vs Scalix. Tiny thunderbird against a legendary dragon. Scalix's tail attack nearly kills Hawk — Karl watches helplessly. Two points to the Prince. | — | Physical — beasts in mortal danger | +| Hawk draws blood | Karl sends Hawk to attack from range. Hawk fires a razor feather — it scrapes along the dragon's hide and draws blood. The crowd gasps. Karl is as shocked as they are. A baby thunderbird wounded a legendary dragon. | IM: Hawk's feather draws dragon blood — shouldn't be possible. (Status Inversion, T2, feather-draws-blood) | — | +| Scalix retaliates | Prince rages at Scalix — dragon breathes fire at Hawk. Karl's beast barely survives. Karl needs a new plan. Sends Rae. | — | Escalation — lethal force deployed | +| Rae on Scalix | Hawk carries Rae and drops her on Scalix's snout. The spider causes Scalix to flinch — spell goes wild, blasts Kruger and cronies into the stands. Crowd laughs. But Karl sees the opening — Hawk could attack now and score the win. But Rae is still on the dragon's face. Winning means losing Rae. | IM: Tiny spider on dragon's face causes misfire — size contrast, the "useless" beast disrupts the legendary one (Status Inversion, T2, tiny-vs-mythic) | Moral — win the battle or save the beast | +| Karl breaks the field | Karl runs INTO the protective circle to save Rae. Runes flash red. Sirens blare. He's broken the rules — no longer protected. He cradles Hawk and Rae under his body. Prince screams: "Scalix! Dragon's breath! DESTROY HIM!" Karl braces to die — as long as his beasts live. | — | Breaking point — life on the line | +| Dragon refuses | Scalix speaks telepathically for everyone to hear: "NO. I will not obey you. You are no longer my master." Silence. "I choose Karl. Unlike you, he is a worthy Beast Master. He is pure of heart. He chooses his beasts first." Dragon bonds with Karl. Power floods him. | IM: Dragon speaks and refuses master — beasts have consciousness and moral judgment. The world shifts from "beasts obey" to "beasts choose." Karl's trajectory permanently changes. (Institutional Depth, T1, telepathic-refusal) | Anticipation — loyalty rewarded | +| Princess reveals | Karl stumbles away from the arena. Princess's men grab him. She reveals herself: "A legendary dragon only bonds with a person of royal blood. And I know every member of my grandfather's family." She looks at Karl: "So tell me: what makes you so special?" | IM: Hidden lineage — royal blood, identity mystery. The world shifts from "poor kid with weak beasts" to "unknown royal heir with a legendary dragon." (World Border, T1, hidden-royalty) | Cliffhanger — hunger | + +## Key Execution Moments + +**The tenderness beat:** Hawk and Rae send Karl a telepathic message after the opening humiliation: "You're special! That's why we chose you!" This is the Self-Sacrifice engine's scroll-stopper. The bond is reciprocal — the beasts love him back. Without this moment, the refusals that follow are principled but cold. With it, they're heartbreaking. + +**The escalating cost principle in action:** Karl turns down a WilderBear (material cost — stays weak). Gets banned from the event (social cost — loses his chance). Runs back for Rae instead of escaping (physical cost — almost killed). Breaks the protective field to save both beasts (life cost — will die). Each refusal costs MORE. The audience watches the price climb from "stays weak" to "will die." That's the engine at full power. + +**Dragon-as-hairstylist:** The single most effective fun-gate IM in any tested promo. A mythic creature — a legendary dragon that could destroy armies — is being used to blow-dry a prince's hair and warm his feet. The CONTRAST between what the dragon IS and what it's being USED for is what makes the audience say "wait, what?" and then laugh. This is magnitude through contrast, not magnitude through power. + +**The anticipation beat is pure Self-Sacrifice payoff:** The dragon doesn't choose Karl because he's powerful. It chooses him because he chose his beasts first. Every single refusal the audience watched — every time Karl stayed weak instead of trading up — is the cause of this moment. The throughline produces the reward. Nothing external. Nothing lucky. The audience can trace the payoff back through every beat. + +**Hunger-forward cliffhanger:** "A legendary dragon only bonds with royal blood. So what makes you so special?" This is a genuinely NEW question — not a replay of "will he survive" but "who IS he?" The world expands from beast academy to royal lineage mystery. Q4 at 95.34% — the audience accelerates through the end. + +## What This Script Does That Others Should Copy +- The beast IS the stakes character AND the IM vehicle. Hawk and Rae are both — their loyalty drives the throughline, and their surprising capabilities (feather draws blood, spider flinches dragon) deliver the world-expansion. +- Every IM passes the fun gate. Dragon-as-hairstylist, tiny spider disrupting a legendary beast, feather drawing blood from scales. The world feels exciting and wondrous, never just dangerous. +- The antagonist benefits visibly from every sacrifice Karl makes. Kruger gets the WilderBear. Kruger rigs the draw. The gap between antagonist and protagonist widens with every principled choice — that's what makes the resentment compound. +- The cliffhanger introduces a question the promo never hinted at. Royal blood, hidden lineage — this comes from NOWHERE and reframes everything. The audience's model of Karl changes in one sentence. + +--- + +# ADDITIONAL REFERENCES + +## Live Action 2.0 (MVS — Quinn) + +**Why this is a reference:** Only proven Underdog Awakening promo. Lowest CPI tested ($3.41). Carries the critical Q2 tension-resolution lesson — the single most important structural finding in the system. Second Opening Compression alongside Spore Cloud. + +**Promo type: OPENING COMPRESSION.** Compresses Quinn's origin (powerless → book activation → academy → assessment → vampire reveal) into a single-day story. Similar approach to Spore Cloud. **Reference this when:** building an Underdog Awakening promo, or compressing an origin story where the protagonist starts at zero and gains power. + +### Promo Brief +- **Throughline:** A powerless kid in a world ranked by ability discovers a blood-activated system that demands impossible tasks — while the strongest bully tries to destroy him. +- **Dramatic Container:** Journey-based — school → bus → academy → assessment → confrontation +- **Quest:** Open the ability book, unlock the system, survive the academy assessment. +- **Antagonist:** Rylie — Level Five, persistent personal bully from school into the academy. +- **Stakes Character:** Peter (powerless ally), Layla (romantic interest), Vorden (inexplicably invested Level Five). +- **Cliffhanger:** Hunger-forward transformation — full Vampire System unlocks, wings/fangs/claws manifest, Quinn faces Rylie. "Ready to find out what level I really am." + +### IM Map + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Book opens / system uploads | Blood activates the book — red flashes, ancient runes, system uploading. Digital interface floods Quinn's vision: HP, levels, quests. A gamified power system living inside his head. | System/Artifact Discovery | 1 | blood-activation-system | +| Assessment arena | Holographic Dalki materialize. Cadets fight with ice wings, teleportation, metal bodies. The power ceiling on display. | Power-Ceiling Reveal | 2 | holographic-arena | +| Shadow blades | Dark energy forms at Quinn's fingertips — small enough to hide, lethal enough to kill. First real offensive power. | Status Inversion | 2 | shadow-blades | +| Vampire transformation | Wings of shadow, fangs, claws manifest. Full system unlocks. The world shifts from "powerless kid with quests" to "what IS this system making him into?" | Status Inversion | 1 | vampire-transformation | + +**Count:** 4 IMs (2 T1, 2 T2), 4 flavors. Mid-section IM desert between book opening and assessment. + +### Key Takeaways +- **The Q2 lesson:** Quinn opens the book at ~25-30%, resolving the opening question ("can he unlock his power?"). Q2 drops to 60.3%. Dragon Battle and Weapons never resolve their opening questions — Q2 holds at 81-86%. The 21-26 point delta is the strongest structural predictor of Q2 health. Any Awakening promo must have propulsion PAST the activation moment. +- **"Powerless kid" is the most accessible hook tested.** $3.41 CPI — the audience understands the situation instantly. No world-building required. +- **The book opening is the strongest single IM in MVS.** Promos with it outperform those without. Blood-activation is physically surprising, expands the world (books are blood-locked?), and permanently changes Quinn's trajectory. + +--- + +## Frost Giant (FLBM — Karl) + +**Why this is a reference:** Second-best CPI tested ($3.72). 21.43% CTI. Journey-based FLBM promo that follows the REAL world rules — Karl is the only beast master, no beast tournaments. Proves FLBM can perform without violating the beast HARD BLOCK. Self-Sacrifice + Underdog hybrid with the beast-as-companion engine. + +**Promo type: OPENING COMPRESSION.** Compresses Karl's injection, beast discovery, train journey, and first major threat into a single-day story. **Reference this when:** building an FLBM promo that respects the real world rules (Karl is the only beast master). + +### Promo Brief +- **Throughline:** Karl gets the injection, hatches a baby bird everyone mocks, and discovers his bond with the beast is his greatest power — but only after nearly losing everything to protect it. +- **Dramatic Container:** Journey-based — injection → train → forest → frost giant +- **Quest:** Survive the Divine Injection, reach the Academy, protect his beast and Dana. +- **Antagonist:** Edgar — wealthy bully, warrior-class, persistent physical threat from injection line through the forest. +- **Stakes Characters:** Hawk (baby bird — the bond object), Dana (childhood friend, amplifies Karl's power). +- **Cliffhanger:** Hunger-forward evolution — Hawk speaks ("My name is Hawk. If you want to save your friend... we need to EVOLVE"), beast mark blazes, Dana seconds from death. The audience never sees the evolution. + +### IM Map + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Injection | Beast claw mark blazes on Karl's arm — spectral aura of an enormous beast claw hangs over him. The room goes crimson. Official staggers back: "Class... Unknown. Power... Unknown." | System/Artifact Discovery | 1 | beast-mark-awakening | +| Beast vision | Karl transported to a wilderness — silver-furred scorpion-tailed deer, lightning spider, nine-tailed flaming wolf all bow to him. Something vast flies overhead. | World Border | 1 | beast-vision-realm | +| Beast Space / egg hatches | In a cosmic realm, an egg cracks open revealing a baby bird. Mechanical voice: "Windspeed Hawk. Abilities: Tornado Generation." Karl looks at the tiny chirping chick. | System/Artifact Discovery | 2 | beast-space-hatch | +| Super Vision | Karl's vision shifts — he can see a tiny nest on a far ridge, colors he's never seen before. The hawk's sight is now his sight. | System/Artifact Discovery | 2 | super-vision | +| Amplified Rend | Dana wraps her arms around Karl and channels magic. Karl fires twenty energy arcs in a storm — the baby bird screeches like a full-grown hawk. Plant monster shredded. | Status Inversion | 2 | amplified-rend | +| Hawk speaks | "Master Karl, we don't have time. My name is Hawk. And if you want to save your friend... we need to EVOLVE." The baby bird that couldn't talk reveals consciousness, intelligence, and a name. | World Border | 1 | beast-speaks | + +**Count:** 6 IMs (3 T1, 3 T2), 6 flavors, no deserts. + +### Key Takeaways +- **Proves FLBM works without violating the beast HARD BLOCK.** Karl is the only person with a beast. Other students have warrior/mage powers. This is the real world — and it performs ($3.72 CPI, 21.43% CTI). +- **The baby-bird-that-talks is a perfect Tier 1.** The world shifts from "Karl has a useless pet" to "beasts are conscious, intelligent, and choose their moment to reveal themselves." AND Karl's trajectory permanently changes — he now has an evolving partner, not a liability. +- **Dana as power amplifier creates a natural IM.** The Rend scene works because Karl is weak alone — Dana's boost turns his pathetic attack into something devastating. The contrast between "four arcs that bounce off" and "twenty arcs that shred a monster" is what makes it stick. +- **Journey structure with each location introducing a new threat.** Injection → train (beast discovery) → forest (plant monster) → frost giant. Each environment escalates and each produces a different IM flavor. + +--- + +## Alien Expedition (MVS — Quinn) + +**Why this is a reference:** $3.87 CPI — strong acquisition. BUT weak bottom-funnel (13.69% CTI). This is a cautionary reference — it scaled on ad metrics but underperformed on conversion. Demonstrates what happens when a promo leaves the primary setting (academy) and sells a world the listener won't encounter immediately. + +**Promo type: FRESH TAKE — with setting risk.** Set entirely outside the academy on an alien planet. This violates the MVS world rule (promos should default to academy setting). The disconnect between "space vampire combat" and the listener's actual entry point (school story) likely explains the weak bottom-funnel despite strong top-funnel. + +### Promo Brief +- **Throughline:** Quinn is sent on a military expedition to an alien planet, discovers ancient vampire technology, and must choose between claiming power and surviving his own squad's hostility. +- **Dramatic Container:** Journey-based — briefing → transport → alien planet → temple → extraction crisis +- **Quest:** Find and claim the ancient vampire dagger while surviving both aliens and hostile squadmates. +- **Antagonist:** Captain Reeves / Jackson / Sarah — the squad itself. They bully Quinn throughout and ultimately turn weapons on him. +- **Stakes Character:** The squad (collective) — Quinn must save the people trying to kill him. +- **Cliffhanger:** Dread-forward binary — Quinn surrounded by his own squad's weapons AND an alien armada. Both want him dead. No clean exit. + +### IM Map + +| Beat | Impact Moment | Type | Tier | Flavor | +|------|--------------|------|------|--------| +| Blood Swipe | Crimson energy erupts from Quinn's fingertips, forming a blade of pure vampire power. Slices through Dalki wrist. | Status Inversion | 2 | blood-blade | +| Ancient temple | Alien engineering mixed with something Quinn's vampire blood recognizes. Dagger on a pedestal, pulsing with inner light — alive, aware, hungry. | System/Artifact Discovery | 1 | vampire-temple | +| Dagger visions | Vampires traveling between stars in ships of living shadow. Ancient wars across galaxies. This dagger forged in the heart of a dying sun. | World Border | 1 | cosmic-vampire-heritage | + +**Count:** 3 IMs, 3 flavors. Significant IM desert through the entire squad-bullying and combat sequence. + +### Key Takeaways +- **Strong top-funnel ($3.87 CPI, 43.18% 3s play, 28.08% thruplay) — weak bottom-funnel (13.69% CTI).** The ad hooks hard but the conversion doesn't follow. Likely cause: the promo sells space combat, but the listener enters the show at an academy. Setting disconnect. +- **IM density is thin.** 3 IMs across a long script. The squad-bullying and combat sequences are throughline-strong but world-expansion-weak. Most of the power displays are magnitude without contrast ("Quinn kills aliens with vampire abilities" repeated). +- **Cautionary lesson on setting risk.** This is the data behind the MVS world rule. The academy is the listener's entry point. Promos set outside it can acquire cheaply but convert poorly. + +--- + +## Police Station (Shadow Slave — Sunny) + +**Why this is a reference:** First reference outside MVS/FLBM/WBT. Strongest engagement metrics tested (43.64% 3s play, 23.97% thruplay, 3.49% true completion). Proves the system works on horror/supernatural IP. But $8.17 CPI and 10.80% CTI — above CPI target, below CTI floor. A script that HOOKS brilliantly but doesn't convert at target levels. + +**Promo type: OPENING COMPRESSION.** Compresses Sunny's nightmare infection, police station surrender, Master Jet encounter, and first nightmare manifestation into a single continuous sequence. + +### Promo Brief +- **Throughline:** Sunny has been infected with the Nightmare Spell. When he falls asleep, he'll be pulled into the Nightmare Realm — survive and return with powers, or die and become a monster. He's been fighting sleep for a week. He turns himself in at a police station, but the nightmare starts breaking through before he's ready. +- **Dramatic Container:** Event-based — police station (single location, escalating crisis) +- **Quest:** Stay awake long enough to prepare, then survive the transition into the Nightmare Realm. +- **Antagonist:** Marcus — Awakened bully in the holding cell, fire powers, persistent physical threat who escalates from theft to attempted murder. +- **Stakes Character:** Sunny's mother (dead — her voicemail is the emotional anchor, her promise is the throughline). +- **Cliffhanger:** Hunger-forward — Sunny manifests shadow powers while still human, locks himself in the cell, and surrenders to sleep. "My trial in the nightmare realm was about to begin." + +### IM Map + +| Beat | Impact Moment | Type | Tier | Flavor | Gate 2 (Fun)? | +|------|--------------|------|------|--------|---------------| +| Reality warp | Police station walls peel back. Mountains erupt. Skeletons rise. Sky fractures. | — | — | — | ❌ Dread, not wonder. Vivid throughline beat. | +| Jet's precedent | "One other person warped reality like this. We still haven't closed the hole." | — | — | — | ❌ Scary lore. Throughline. | +| Nightmare creature | Sleeping man's arms morph into swords. Vision becomes reality. | — | — | — | ❌ Body horror. Sticky but grim. Throughline. | +| Cherry blossom vision | Floating sakura grove. Shadow army bows before a scarred, powerful version of Sunny. "You made her a promise. Keep it." | World Border | 1 | future-self-vision | ✅ Aspirational — the audience sees what Sunny COULD become. | +| Shadow manifestation | Shadow figures flow from vision into reality. Sunny manifests power while still human. Impossible. | Status Inversion | 1 | shadow-power-while-human | ✅ Exhilarating — the "useless" kid does the impossible. | + +**Count:** 2 functioning IMs (2 T1, 0 T2), 2 flavors. The other three moments are vivid, sticky, memorable throughline beats that fail Gate 2 — they make the world feel intense and dangerous, not exciting and wondrous. + +### Key Takeaways +- **Best engagement metrics tested.** 43.64% 3s play (highest), 23.97% thruplay (highest), 3.49% true completion (highest). The opening hook ("I'm turning myself in!") and the escalating crisis hold the audience better than any other promo. The STRUCTURE works. +- **But CPI ($8.17) and CTI (10.80%) underperform targets.** This is the FTP pattern — strong throughline, weak world-expansion. Most of the vivid moments fail Gate 2 (Fun). The world feels like suffering, not adventure. The audience says "that was intense" not "I want to spend time there." +- **Only 2 functioning IMs despite 5 vivid moments.** This is the clearest proof that the three-gate test matters. Sticky + Distinct is not enough. Without Fun, vivid moments do throughline work but don't drive installs. Shadow Slave has nearly identical IM-to-CTI performance as FTP (2 IMs → 10.80% CTI vs 1-2 IMs → 3.70% CTI). +- **The mother's voicemail is the strongest emotional anchor tested.** Dead mother's last words as a recurring physical object (the phone) that the antagonist eventually destroys. This is why the promo HOLDS despite the horror tone — the throughline is "keep the promise to my mother," not "survive the nightmare." +- **Cautionary lesson: horror/dread tone may have a CTI ceiling.** Even with strong structural execution, if the world feels like a place of suffering rather than adventure, the install impulse weakens. The audience watches to the end (best completion tested) but doesn't cross the threshold to "I want to spend time in this world." More data needed, but this pattern aligns with FTP. + +--- + +# DOCUMENT REFERENCES + +For structural rules: the workflow files (W1–W5) and CLAUDE.md. +For engine definitions: **Hook Engine Library** +For performance data: **Performance Benchmarks** +For writing execution: **Writing Style** \ No newline at end of file diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/register_anchors_v3.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/register_anchors_v3.md new file mode 100644 index 0000000..ff313f0 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/register_anchors_v3.md @@ -0,0 +1,125 @@ +# REGISTER ANCHORS · v3 — the load-file + +*v3 delta: Anchor 4 is now the operator-selected CSR version of the ValpOpen showroom sequence, verbatim as supplied — status confirmed, not proposed. Anchor 5 (FLBM Bond, the scanner → waiver → needle) remains PROPOSED pending operator sign-off. Anchors 1–3 unchanged. Cap ~5.* + +*Loaded WHOLE into every W3 run (Steps 2–3) and every W4 drafting context. These excerpts are the register: what performed promo writing sounds like at the bar. Also the exchange library — every multi-turn pattern the pipeline trusts lives here. **The one law: imitate rhythm, register, and exchange shape — NEVER content.*** + +--- + +## ANCHOR 1 — Princess Ebony: the dance → the hand (operator-written · the major anchor) + +**What to imitate:** Escalation carried through turns, not narration — Beriod's two-line violation, the room blaming the victim, the four-word mercy ("I'm sorry that happened."), the dance ladder that climbs from small talk to treason in six exchanges, and the public command answered with silence. The narrator between lines: one or two sentences of event, never verdicts. The SILENCE-PEAK — the promo's loudest moment is a hand left unanswered. + +> [Full sequence as in v1: "Let the dances begin!" … through … "The hand stayed extended. Unanswered. The King of Allarion stood before every royal family in the realm — and his daughter walked away from him."] + +## ANCHOR 2 — Princess Ebony: the council vote (operator-written · ritual as volley engine) + +**What to imitate:** Repetition with one variable as a tension machine — five identical votes interleaved with a private exchange. The stammered punch line ("Duh... duh... ba... ba-banishment."). The father's hidden relief — a full reversal in three narrator sentences, then buried. + +> [Full sequence as in v1: "Nova... they're going to kill me." … through … "The sentence is banishment. Effective immediately."] + +## ANCHOR 3 — Draft Selection: the auditorium (shipped · crowd-as-character, status inversion) + +**What to imitate:** The crowd as a speaking character; mockery that teaches; the one-line status inversion and the room's laughter changing sides — twice; public humiliation absorbed for a hidden reason; the deadpan protector; escalation capped by one word of real authority. + +> [Full sequence as in v1: the draft board chime … through … LEO: "Enough."] + +## ANCHOR 4 — ValpOpen: the showroom → the convoy (operator-selected CSR · the RD lane's master beat) + +**What to imitate:** The gatekeeper gauntlet priced line by line — salesman, manager, police — with the hero answering flat and once ("I'm a customer, not a clown for your entertainment."). The escalation of gatekeepers as its own ladder. The recognition drop staged in FRONT of the mockers: the convoy, the deference ("My apologies, sir."), the gatekeeper's collapse, and the payment as violence ("Pay him."). Note what the hero never does: explain, boast, or raise his voice. + +> [Interior, Luxury Car Showroom, Bright Lights, Mockery, and Misjudgment, Early Afternoon] +> NARRATOR: A war hero, worth billions, walked into a car showroom in disguise. The salesman insulted him, thinking he was a drifter. +> SALESMAN: "Get your grubby little mitts off my car. It's a Lamborghini, not a dumpster truck." +> LUCAS: "I just wanted to buy it. I wanted to surprise my wife with something special." +> SALESMAN: "Guys like you don't drive cars like this—you clean them. Maybe take her out in a dumpster truck." +> NARRATOR: He gave Lucas a once-over—scuffed boots, army fatigue pants, a faded olive green T-shirt, and quiet defiance. +> LUCAS: "Why don't you do your damn job. You're a salesman, right? Now show me the car." +> SALESMAN: "Piss off, loser. I work for people who can afford luxury. Not for a broke-ass nobody like you." +> LUCAS: "I've got the money. Here is the down payment. I'm not leaving this place without that Lamborghini." +> NARRATOR: Lucas brought out a wad of cash. The salesman's smile twisted into disbelief, then irritation. +> SALESMAN: "Oh sure. You probably robbed a gas station for that." +> NARRATOR: Lucas stood silent, eyes locked on him. +> [Interior, Luxury Car Showroom, Manager's Office, Public Spectacle and Tension Rising, Early Afternoon] +> NARRATOR: From his office, the Manager had been watching it all unfold—the insults, the crowd, and the man who refused to flinch. He smirked and stepped out, his voice booming across the showroom. +> MANAGER: "What's going on here?" +> SALESMAN: "This fool's pretending he can buy a Lamborghini. Waving fake cash like a circus act." +> NARRATOR: The Manager gave Lucas a once-over. +> MANAGER: "Oh, so now anyone can walk in here with lunch money and demand a luxury car?" +> LUCAS: "I'm a customer, not a clown for your entertainment." +> MANAGER: "A customer? Right. I've called the cops. Maybe they'll buy you a bike instead." +> NARRATOR: A murmur rippled through the customers as the showroom lights caught the reflection of red and blue outside. Moments later, two police officers walked in, their authority slicing through the tension. +> OFFICER: "What's the issue?" +> MANAGER: "This man's been harassing our staff. Trying to claim he can buy the Lamborghini. Clearly, a scam." +> NARRATOR: Lucas's jaw tightened. +> LUCAS: "I came to buy a car. That's all." +> NARRATOR: The officer gave a sardonic little laugh. +> OFFICER: "And I'm the valet. Do you have an ID, bum?" +> LUCAS: "I can buy it. I have the money." +> NARRATOR: Lucas lifted the same wad again. +> OFFICER: "Right. And I've got a jet outside." +> NARRATOR: The laughter in the showroom spread again—smug, poisonous, loud. The salesman grinned, enjoying the show. Lucas didn't rise to it. He just stood there, calm and silent, eyes on the Lamborghini. +> [Exterior, Showroom Entrance, Convoy Arrival, Engines Roaring, and Shocked Silence, Early Afternoon] +> NARRATOR: Then, the world shifted. +> Engines rumbled outside, deep, synchronized, powerful. A convoy of black SUVs rolled up in perfect formation. +> The laughter died instantly. +> From the lead SUV stepped a man in a fitted black T-shirt, dark tactical pants, and sturdy boots. +> His stride was precise, his expression unreadable. Behind him, a dozen men in uniforms followed, forming a line that made even the policemen step back. +> The glass doors slid open as they walked inside. +> [Interior, Showroom Floor, Power Reversal and Awestruck Faces, Early Afternoon] +> MANAGER: "Who are you people?" +> NARRATOR: The man in the black T-shirt leading the convoy ignored the manager and walked straight up to Lucas. +> When Lucas spoke, mildly annoyed, everyone's jaws hit the floor. +> LUCAS: "I told you to keep your distance, Jordan." +> JORDAN: "My apologies, sir. Our men spotted cop cars outside—we had to step in. What happened, sir?" +> NARRATOR: Jordan was treating Lucas with a reverence that made everyone look at them wide-eyed. They knew Lucas wasn't a nobody. +> LUCAS: "Funny thing actually. These people wouldn't let me buy a car, Jordan." +> NARRATOR: The Manager suddenly lost it and shouted. +> MANAGER: "What the hell is happening in my showroom? Can someone explain it to me? Please?" +> JORDAN: "Let me." +> NARRATOR: Jordan nodded to Lucas and stepped in front of the manager. +> JORDAN: "If I even hear you breathe wrong before we are done here, I'll make sure this place turns into a parking lot before sunrise." +> NARRATOR: The Manager froze, his face draining of color. +> JORDAN: "Pay him." +> NARRATOR: A man from the convoy stepped forward and placed a sleek black card on the counter. +> JORDAN: "Full payment for the Lamborghini. Get the keys." + +## ANCHOR 5 (PROPOSED) — FLBM Bond: the scanner → the waiver → the needle (shipped · the impossible acceptance at performance density) + +**What to imitate:** The public measurement as execution theater — the scanner's one-word verdict ("Seven."), the crowd repeating it "like a punchline," the sacrifice carried in one sentence of backstory, and the impossible acceptance built from three flat lines. No internal monologue longer than two sentences before the needle goes in. + +> The nurse reached my row. … She set the scanner flat against my arm. +> The panel lit red. +> Seven. +> Laughter broke across the rows behind me. Kruger looked back at me and laughed — the easy, open laugh of someone who had never been surprised by anything going the way he expected. Then he tilted his forearm so I could see his fourteen from across the room. +> "Seven." Someone repeated it like a punchline. "Three below the minimum." +> The soldier beside the cart stepped forward. +> "Below ten, this injection is fatal. You can go home, mine kid." +> My mother had sold the last of her medical pension to buy my place in this gymnasium. … She had spent her last resource to put me in front of it. +> I looked at the needle. +> "I want to try." +> The room went quieter than it had been before the laughter. +> "Boy…" +> "Where's the death waiver?" +> The soldier held my eye for a long moment. Then he reached into the briefcase at his feet and pulled out a single sheet of paper. +> "You die, your family gets nothing." +> I signed it without reading the rest of it. +> The nurse put the needle in. "Your call." + +--- + +## THE EXCHANGE SHAPES INDEX (what the anchors teach, by name) + +| Shape | Where it lives | Turns | +|---|---|---| +| Measured protest → violation doubled down → the snap | Anchor 1 (Beriod dance) | 2 + narration | +| The question ladder (small talk → dangerous truth, climbing) | Anchor 1 (Greyson dance) | 6 | +| Public command → silent refusal (SILENCE-PEAK) | Anchor 1 (the hand) | 1 + silence | +| Ritual repetition with one variable (votes, bids, rounds) | Anchor 2 (council) | 5+ interleaved | +| Crowd mockery that teaches the world rule | Anchor 3 (auditorium open) | scattered singles | +| One-line status inversion → room changes sides | Anchor 3 (Quinn's answer; Erin's spike) | 1–2 | +| Bully's threat → deadpan acceptance ("I'll be right here.") | Anchor 3 (Rex/Erin) | 4 | +| The gatekeeper gauntlet → recognition drop | Anchor 4 (showroom → convoy) | escalating singles → collapse | +| Scanner verdict → impossible acceptance (the death waiver) | Anchor 5 (the needle) | 3 flat lines | + +*Maintenance: anchors are added only by operator sign-off — a shipped winner's best sequence, excerpted whole. Cap ~5; past that, curation beats accumulation.* diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/three_pillars.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/three_pillars.md new file mode 100644 index 0000000..dca4dac --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/three_pillars.md @@ -0,0 +1,65 @@ +# THREE PILLARS — CANONICAL REFERENCE +# The three load-bearing promises of each show — what a cold audience installs for. + +--- + +## WHAT THE THREE PILLARS ARE + +Every show is defined by three pillars: the core elements an audience is actually installing to experience. They are the show's promise, stated as content. The promo must thread all three or it advertises a show the listener won't recognize when they open the app (a "Woodward risk"). + +## HOW PILLARS ARE DETERMINED + +Choose one pillar from each of these three categories. The categories guarantee the show is described across its full surface — the person, the place, and the engine — rather than three flavors of the same thing. + +1. **Character stakes** — what the protagonist stands to lose or win as a person: the revenge, the family in danger, the rejection, the secret they must keep, the debt, the rescue. +2. **Setting** — the world the story lives inside: the academy, the patriarchal court, the apocalypse, the elite school, the monster kingdoms, the VR game world. +3. **Fantasy element / progression system / complication** — the genre engine: the power system, the System/interface, the cultivation method, the hidden legacy, the bloodline, the time-travel mechanic. + +Order in the list below is the show's own ordering, not the category order — a pillar that reads first may be the fantasy element, not the character stakes. What matters is that all three categories are covered. + +## RELATIONSHIP TO THE RELATABLE THRULINE (W2) + +The pillars do double duty. As **content**, they are the fun the audience installs for (threaded via Promise Threading). Translated into a **universal human experience**, one of them becomes the promo's **Relatable Thruline** — the empathy nerve a cold viewer feels in the first 10 seconds. Examples: a Secret/Hidden Identity pillar → "everyone has had something they needed to keep hidden"; an underdog / class-system pillar → "everyone has been underestimated." See `workflow2_skeleton.md` → Spine → Relatable Thruline. + +## WHERE PILLARS LIVE + +The three pillars belong at the TOP of every world file's Essence block (`world_[show].md`). This file is the canonical master list; the per-world Essence copy is the working reference during W1/W2. + +--- + +## PER-SHOW PILLARS + +| Show | Pillar 1 | Pillar 2 | Pillar 3 | +|------|----------|----------|----------| +| **MVS** (My Vampire System) | Secret Identity | Progression Elements / The System | Hostile Academy / Institution | +| **PE** (Princess Ebony & the Silver Dragon) | Secret Identity | Patriarchal World | Royal Intrigue | +| **TSS** (The Seventh Seal) | Hidden Identity | Family Politics | Lucien / Power Progression | +| **BW** (Blood Warlock) | Soul Record / Blood Manipulation | Lilith | Apocalypse Survival (light family stakes) | +| **TS** (Trillionaire Sterling) | Hidden Legacy / Inheritance | Aurion / Supernatural Abilities | Class warfare in an elite setting | +| **WBT** | Hidden Potential / Reversal Promise | Rank = Social Class | Academy Setting | +| **FLBM** | Beast Power Progression | Academy Setting | Class System / miner's kid among elites | +| **TBB** (The Billionaire's Bodyguard) | Secret Bodyguard / Identity | Jade Pendant / Dragon Mastery | Elite School / Wealth Gap | +| **FB** (Flameborne) | Secret Mentor / Hidden Training | Dual Cultivation / Alchemy | Clan Rivalry / Family Tournaments | +| **ZW** (Zompirewolf) | Zompirewolf power system (triple hybrid) | Revenge for Parents | Faction Politics / Monster Kingdoms | +| **RBM** | Betrayal and Revenge | Beastmaster Progression / Amberbourne College | Family cast out / mother's cure | +| **TMT** | Mech Industry Ladder (poor → rich) | Missing Father / Impossible Debt | Hidden System (Mech Designer System) | +| **SS** (Shadow Slave) | Weak to Strong (protagonist at zero, orphan bg) | Nightmare Spell / Dream Trials | Hidden Identity (Shadow God / Powers) | +| **SoW** | Reborn Warrior / Hidden Power | Family under siege (broke, honorable, in danger) | Noble Society / Academy | +| **DSA** | Royal family rejection | Forbidden Power | Beast Revival System / Knight Army | +| **FTP** | Godforge Technique (Pain = Power) | Sister Rescue (Skyreach Sect) | Family Power Struggle | +| **SW** (Strongest Warlock) | Secret Identity (Ordinary masquerading as dud) | Underdog / Zero-Power Progression | Academy Hierarchy (Duds, Noble Factions, Institutional Injustice) | +| **AMOF** | Hidden Identity | Mirror Portal | Corrupt Power (Family / Royal Betrayal) | +| **Bloodreign** | Future Knowledge / Time Travel | Ancient Bloodline / Legendary Weapon | VR Game World (Earth Online) | +| **PH** (The Primal Hunter) *(intake draft)* | Overlooked Everyman Born to Hunt (hidden Primal Hunter Bloodline) | System Apocalypse / Survival Tutorial | The System (LitRPG progression) | + +--- + +## COVERAGE NOTES (for maintenance) + +**Mapped to world files & mirrored into their Essence blocks:** MVS, PE (`world_pesd.md`), TSS, BW, TS, WBT, FLBM, TBB, FB, ZW, RBM, TMT, SS, FTP, SW. + +**Listed here but no world file yet:** SoW, DSA, AMOF, Bloodreign. Pillars recorded above; add to a world file's Essence when one is created. + +**Intake draft (growth show, pending operator blessing):** PH (The Primal Hunter) — pillars mirrored into `working files/documentation/PrimalHunter_WorldBible_v1.md` Layer 0; Relatable Thruline = "everyone has felt they were meant for more than the small, gray life they were stuck in." Promote into `world docs/` once blessed. + +**World files with no pillars yet (need determination via the framework above):** DTE, LC, MVS-DR, RSM, SSSK, TGSC, TMTF, TOR, TSR/MI, TSV, ZAIP. diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/voice_style.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/voice_style.md new file mode 100644 index 0000000..1482734 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/voice_style.md @@ -0,0 +1,375 @@ +# Universal Voice & Style — Promo Tool + +**Status:** v1 draft. Required input for W4 in both modes. +**Purpose:** Universal craft reference for promo prose. Replaces the show-specific HVS Voice DNA pattern with principles that apply across every show. Pulled from proven winners as anchors; not tied to any one show's world. + +**Anchors (six proven winners, drawn on throughout):** +- **GU9347** — MVS Draft Selection (Squad Three / Erin / Leo / no-abilities phase) +- **WBT Pearl Crystal** — Princess Ebony "Kiss the Hand" (the ball / Beriod / Geralt salute) +- **GU2193** — MVS Weapons Selection (Bloodbound Gauntlets / Loop duel) +- **ZW Love Bite** — Zompirewolf (the Mistress / Julian / Donovan) +- **GA9436** — TS Pawn Shop (Jed / Room 109 / Chris Jones / locket) +- **GU9672** — WBT Pearl Crystal (Ren / Cloud / Cliffs / Jin) + +Supplement from other proven winners in the corpus where a pattern needs broader coverage; the six above are primary calibration anchors. + +> ⚠️ **WBT "Cloud" exemplars below are OFF-ESSENCE (WBT HARD BLOCK 8).** The GU9672 / Pearl Crystal exemplars in this file treat Ren's spore as a named, sentient companion beast — "Cloud" — that he fist-bumps and addresses ("Don't worry, Cloud"). **WBT canon has no character named Cloud**; the spore is a fused, near-inert fungus (cosmetic hair-mushrooms) and the bond is Ren ↔ his parents. Use these exemplars **only** for the abstract *craft mechanism* (compression, witness, gesture-not-commentary). Do **not** reuse the Cloud dialogue, the fist-bump, the "we" framing, or any spore-as-companion artifact in new WBT work — invent the show-native equivalent (e.g., Ren steadying himself, or a beat with his parents). + +**How W4 uses this.** Loaded at W4 entry. Each section is tagged with its mode of use: + +| Mode | Meaning | +|---|---| +| **DRAFTING** | Read while generating prose. Principles to write toward. | +| **REVISION** | Read during self-revision passes inside W4. | +| **EVALUATION** | Used by scene-by-scene mode tests + one-shot clarity pass. Pass/fail or flag/advance. | +| **REFERENCE ONLY — DO NOT IMITATE** | Demonstration of mechanism. Never lift phrasing, sentence rhythm, or worldbuilding artifacts. | + +**Anchor usage rule.** Do not copy anchor phrasing, object types, character dynamics, world terms, or sentence rhythms unless they naturally fit the target show. Transfer only the **craft mechanism** — the why-it-works underneath. The locket, the menu, the spaghetti, the dragon, the Iron badge, Cloud's tear are welded to their specific worlds. The mechanism transfers; the artifact does not. When in doubt: invent the show-native equivalent. + +**Priority hierarchy.** When two principles conflict, prioritize **clarity and funnel retention over literary texture**. A slightly blunt but clear hook beats an elegant but confusing one. Do not preserve beautiful prose if it delays the quest, muddies the genre, or weakens the cliffhanger. Texture serves retention, not the other way around. Note that clarity is **not** the enemy of the funnel: purple prose and tedious scene-setting are *both* funnel leaks, and the line that lands plainly on first hearing is usually the fast line, not the slow one. The fix for an unclear line is never a setup paragraph — it is a plainer line. + +--- + +## §1 Seven Craft Principles — *DRAFTING · REVISION · EVALUATION* + +These are the cross-cutting patterns winners share and middles/failures break. Every micro-beat in a promo should be auditable against at least one. The diagnostic tests in §7 collapse these into yes/no checks. + +### 1. Specificity over labels + +Winners write with concrete objects, numbers, and named details. Failures lean on adjective-vocabulary: "pathetic," "loser," "freak," "worthless," "monster." The label tells the listener how to feel; the object lets them feel it. + +The pattern works because a specific object becomes the listener's reference point and gets re-touched later (a "ledger object"). The locket. The menu. The mother's red dress. The Iron badge. The 43 dollars. Cloud's tear. Each is a thing the antagonist can mock, the protagonist can clutch, the cliff can return to. + +When a writer reaches for "pathetic" or "loser," they are skipping the work of finding the object that earns the emotion. + +**Caveat — sourced, not invented.** Specificity must come from the material, never from fabrication. When the writer reaches for a concrete number or duration the source doesn't provide ("three years I trained"), inventing it to satisfy this principle is hallucination, not craft. Pull the figure from the W3 beat sheet or world doc, or use a sourced non-quantified object instead. The riskiest invented specifics are durations, ages, counts, money, and dates — and they often also break continuity (an entry-window first-year has not been somewhere "three years"). + +**Caveat — opening line / powerstart.** Specificity inside the scene wants concrete objects; the **opening hook line** wants broadest possible appeal. A niche worldbuilding term in the first sentence ("If the Lycans find out I'm Zompirewolf-bonded...") alienates the scroll before it earns the right to teach the listener anything. The opening line carries the engine in compressed form using vocabulary any cold listener can parse: "If anyone in this room found out what I was..." / "I tried to pawn the only thing my dead parents left me..." / "If they find out I have a dragon..." Worldbuilding terms can be introduced once the listener is already inside the scene — paragraph two onward. + +### 2. Cruelty as common sense, not performance + +The strongest antagonists in the anchor set don't snarl. They state facts — or preferences, or amusements — that happen to be devastating. They diminish without raising their voice. Their threat is certainty, not volume. This is a **tonal** principle (how the cruelty is voiced), separate from #6 (who/what does the harm). + +Across the anchors: Chris Jones in Pawn Shop describing the spaghetti menu the girlfriend kept "to laugh at" — conversational, beaming, comfortable. The Mistress in Love Bite: "I want you to feel every second." — pleasant, almost intimate. Edwin in Ebony: "How thrilling." — bored. Beriod: "I like how uncomfortable you're getting. It's cute." — amused. Donovan: "Most pups cry. You don't. How interesting." — curious, not threatening. Wei in Pearl Crystal introducing Ren as "our class disappointment" — administrative. + +The mistake is theatrical cruelty — villain monologues, slurs delivered at volume, threats that read as performance. When the cruelty is delivered as common sense, the antagonist registers as someone who believes what they're saying — which lands harder than any shouted line. + +### 3. Compression at load-bearing moments + +Across the anchor set, the line that hits hardest is almost always the shortest. Fragments and three-word utterances are used as percussion, not as default rhythm. + +"Live, my child." (Pawn Shop, the locket) — "Pick me." (Ebony, Greyson) — "I yield." (Weapons, the giant) — "I'll be right here." (Draft Selection, Erin) — "Bite." (Love Bite, Tristan's choice) — "We do." (Pearl Crystal, Ren/Cloud). + +Compression works because the surrounding prose is mid-length and measured. A short line in a sea of short lines reads as choppy; a short line dropped into mid-length flow reads as decision. Fragments must be load-bearing. They are not the default register. + +### 4. The witness who notices + +Inside every winner there is a second character who registers the cost the protagonist won't name aloud. They don't fix it. They mark it. + +Geralt adjusting Ebony's tiara, then later: "You will always be Princess of Allarion to me." Erin: "I have your back. No matter what." Julian inside Tristan's head. Cloud's tear in the dorm. The locket-voice's "Live, my child." Leo's recognition: "It can't be." + +The witness beat is the scroll-stopper. It's the moment the listener stops scrolling because someone in the world saw the protagonist clearly. Without it, injustice density flattens into misery porn. With it, completion holds. + +The witness can be a person, a beast, an inner voice, or an artifact. The mechanism is the same: they SEE. + +### 5. Character through gesture, not narrator commentary + +The strongest character moments are physical actions the narrator does not interpret. Geralt's hand adjusts the tiara — the narrator does not say "he was the only one who treated her with respect." The Mistress's thumb to the cheek — the narrator does not say "she enjoyed possessing him." Cloud's fist bump. Erin's hand to her scar. The locket warm against Jed's chest. + +When the narrator interprets, the reader's job evaporates. When the gesture lands and the narrator stays silent, the reader does the inference and the moment becomes theirs. + +The kill flag is `BOND-CLAIMED-NOT-DEMONSTRATED` in the taxonomy. This principle is its prose-craft expression. + +### 6. System as antagonist (institutional cruelty) + +Distinct from #2: #2 is tonal (how cruelty is voiced); #6 is **structural** (who or what does the harm). The deepest injustice in every anchor is enforced by a law, custom, or institution — not by a single antagonist. The individual villain may be the face of it, but the harm continues if you remove that villain because the structure remains. + +Anchor examples — each is the **structure itself** causing harm: the Officiant in Ebony reading the marriage scroll ("She will bear his name. She will bear his children. She will not speak in council..."); King Liam's auction at the ball ("Sixty thousand gold AND one hundred thousand silver — to any man in this room who will take my daughter"); the five councilmen voting "Death" one by one; Wei's "Iron Rank. Forbidden from climbing... Dreaddeath Mines for the rest of your lives. Work-for-rations. No income."; the treaty in Love Bite that legally permits vampires to hunt one wolf per month inside the city; the nun in Jed's orphanage flashback ("There is no family left. No one is coming for you. Now eat your soup, little boy."). + +This is the IM-INSTITUTIONAL DEPTH type from the taxonomy. As a prose principle: the system is described in complete sentences, formal vocabulary, paperwork rhythm. The horror is that the cruelty is **the rule**, not **a violation of the rule**. The world is built this way and the protagonist is its waste product. + +When promos lean only on individual villains and skip the system layer, the injustice feels like a one-off problem with a known solution. When the system layer is present, the listener understands that the protagonist has nowhere to appeal — they have to break the rules to survive, which is the underlying engine of every download. + +**What is NOT institutional cruelty** (common confusion): power-reveal beats where the institution's machinery registers the protagonist (draft board / scanner showing a Level reading; System chimes announcing a new skill). These are System/Artifact Discovery beats from the taxonomy — the institution is detecting, not harming. Use #6 only for beats where a rule, law, or custom is itself the source of the suffering. + +### 7. End on the question, not the answer + +Every anchor's cliff is a question the listener cannot answer from the promo alone. "Who is Boris?" / "Who else wants Tristan in Blackmoon?" / "What did Ren see inside the Pearl Crystal?" / "Who is Jed Sterling?" / "What did Leo see before — and who else moved the way Quinn moves?" + +The promo may initiate a resolution (Quinn beats Loop; Ebony walks past the hand; Jed survives the dumpster) but the **emotional payoff** lives in the app. Every promo's final 100 words narrows from a wide world to a single unanswered question that costs nothing to ask but cannot be answered without downloading. The Pocket FM Narrator block formalizes this — but the cliff has to be set up by the prose 200 words earlier, not by the CTA itself. + +The failure mode is a cliff that resolves. The protagonist wins decisively; the antagonist is destroyed; the question is closed. There is no reason to download. + +--- + +## §2 Scene-Type Guidance — *DRAFTING · REVISION* + +Six scene types recur across the anchor set. Each has a target register and a failure mode. + +### Opening / Powerstart + +**Register.** Interiority-first or hook-line-first. Open inside the protagonist's perception or with a one-line hook that compresses the engine. Stakes-first, scene-second. Interiority-first never means orientation-last: even when we open inside perception, the listener must be able to place *who / where / what* on first hearing. + +**The opening 10–30 seconds matter more than anything else.** Winners drop the listener inside a specific physical or emotional moment before the world is established: "If anyone in this room found out what I was, I wouldn't make it out alive." (Draft Selection) — "I tried to pawn the only thing my dead parents left me." (Pawn Shop) — "If they find out I have a dragon… they'll burn me alive." (Ebony). Each is a single sentence; each contains the engine in compressed form; each is followed by a SPECIFIC PHYSICAL scene (the auditorium, the pawn shop, the courtyard) — not a world-bible exposition paragraph. + +**Orientation rides the hook — both jobs, one breath.** The hook line orients. Who/where/what arrive *inside* the charged action, not in a setup beat before it. Zompirewolf: "Guards chained Tristan to a post as a throne room packed with werewolves howled for his death." — scroll-stop, empathy, and full orientation in one sentence, zero loitering. This rule is **two-sided**, and both sides kill the funnel up top: *under-orient* (withhold the referent behind a riddle, premise-as-metaphor, or mood — listener confused) or *over-orient* (scene-setting / exposition that delays the engine — listener bored). Clarity and the funnel are aligned here, not in tension: the purple opening is almost always also the slow one. The fix for a confusing opening is a plainer line, never a setup paragraph. + +Orientation is *situational* (who/where/what is happening to this person now), not *mechanical* (how the world's systems work). World mechanics ride the inciting action and the reactions around it — never a rules-teaching setup block. **No retreat after the hook:** once line 1 promises the engine, the next beat moves to the protagonist's inciting moment, which should land by ~sentence 2–3. If the narrator explains a mechanic the scene is about to demonstrate through reactions, that exposition is redundant — cut it and enter on the moment. + +> **DON'T** (Death Sentence, transmigration open): *"The hands were wrong. The reach was wrong. The pain was wrong, blooming up from a hundred places... she had been poured into a stranger."* — the body-swap fact is withheld, so "wrong" has no referent and the premise arrives as a metaphor the listener must decode. Mood before fact, and it loiters. +> **DO** (Zompirewolf): *"Guards chained Tristan to a post as a throne room packed with werewolves howled for his death."* — literal event first, in plain words, through action; texture (the howling crowd, the blood-smell) rides on top once the listener is grounded. + +*Guard — "wakes up confused" / transmigration openings* are the highest-risk pattern: the character's disorientation tempts the writer to disorient the listener. Name the literal situation (whose body, where, what just happened) within 2–3 sentences. The confusion is the character's, never the listener's. + +**Failure mode.** Slow world-build openings ("In the kingdom of Allarion, where men ruled and women obeyed..."), atmospheric loitering before the engine surfaces, a hook line generic enough to fit any show ("I had a secret..."), OR a decode-required opening that withholds the literal situation behind mood/metaphor. + +### Antagonist Cruelty (the inciting injustice) + +**Register.** Concrete object specificity (§1 Principle 1) + procedural delivery (§1 Principle 2) + a system-layer reinforcing the protagonist's helplessness (§1 Principle 6). Often three antagonist beats compounded: peer + authority + structural. + +**Anchor pattern.** Chris Jones's monologue in Pawn Shop is the gold standard — the menu, the spaghetti, the two months saved, the cologne the girlfriend washed off. Each detail is specific, the delivery is conversational, and the cruelty is reinforced by Jenifer's silence and the bodyguards' professionalism. Cruelty in three layers: Chris (peer), Jenifer (intimate betrayal), the guards (institutional sanction — Chris owns the building and the bodies in it). + +**Cruelty answers the protagonist's ACTION.** The strongest inciting injustice is not cruelty landing on a passive victim — it is cruelty *punishing the protagonist for doing the right thing* (he stands up / protects / refuses / tells the truth, and the antagonist's cruelty is the answer). Pair every cruelty beat with the protagonist's enacted virtue it punishes. (This is the W2 "active agency punished" injustice engine, at the prose layer.) + +**It must land as unjust, not polite.** Procedural/cold delivery (§1 Principle 2) does not mean gentle or courteous. A cruelty framed as a kindness — "here's a gift from my husband," warm and mannered — reads as courtesy and defuses the injustice. Cold can still twist the knife: the antagonist demeans, prices the protagonist at nothing, mocks the very good he just did. Keep the calm register; make the content sting. Test: would the listener's stomach drop at how unfair this is? If it only reads as "a bit cold," push the content harder. + +**Failure mode.** Labels without objects ("you're pathetic, loser, freak"). Cruelty as performance (the villain monologue overrun, taxonomy flag `VILLAIN-MONOLOGUE-OVERRUN`). A single antagonist without system reinforcement, so the harm reads as personal grievance rather than world-position. Polite/mannered cruelty that reads as courtesy rather than injustice. Cruelty landing on a passive protagonist who did nothing to provoke it (sympathy, not the injustice that converts). + +### Dialogue + +**Register.** **No interstitial dialogue tags. No "he said" / "I said" / "she whispered." The action IS the tag.** Every line is anchored by a physical action, a beat of stillness, or nothing at all — never by an attribution verb. Reserve physical staging for the load-bearing pause; don't bracket every line with floating/movement beats. Use stillness at the moment that matters. (A bare "he said" is not a "minimal" tag — it is the banned pattern. The action carries the attribution. This is the Single-Cast rule; the only exception is the Multi-Cast VO speaker-prefix format, which is a separate routing mechanism — see workflow4 Speaker Tags.) + +**Pattern.** Bullies escalate vocally — they don't deliver one line and stop, they pile on, amplify, build false narratives in real time (Chris/Jenifer in 109; Rex/Loop in the auditorium; Jin throughout Pearl Crystal). The protagonist's compressed reply (or refusal to reply) lands harder against an escalating wall. + +**Failure mode.** Bare attribution tags ("he said," "she said," "I said") — the most common leak; the action must carry it instead. Every line bracketed by movement ("she said, walking to the window"). Long sub-clause speech-frames ("Azar, very quietly, from her shoulder"). Adverb-tag construction ("she said heavily"). Use action-as-tag or describe voice quality as a complete sentence ("Her voice was bored."). + +### Action + +**Register.** Continuous-process rendering. Physical sensation first. End abruptly. Pivot to consequence. + +**Pattern (Love Bite, the Mistress's transformation):** "Her ruby eyes glowed yellow. White fur pushed up through her skin like grass through pavement. Her ribs split open. Her face — beautiful one second ago — tore down the center as a charcoal-black snout pushed through. Sharp teeth that didn't fit in her mouth kept growing. By the time she finished she was nine feet tall." Continuous body-horror process. Each sentence renders one stage of the change in tactile terms. The ending sentence cuts abruptly to outcome — no narrator commentary on her power. + +**Pattern (Draft Selection, Quinn through the barrier):** "I hit the arena's safety barrier — the barriers I'd watched rise minutes ago, built to contain ability-level combat, engineered by the Academy to hold. I went through it. It didn't crack. It shattered." Single action, single image, immediate consequence (the crowd's recalculation: "A Level One just broke through a combat barrier"). The setup sentence does the work the action sentence does not need to repeat. + +**Failure mode.** Stepwise destruction lists ("Then the head. Then nothing."). Long combat sequences without consequence. Power displays that don't translate into world-position shifts. + +### Quiet / Bond (the tenderness beat) + +**Register.** Atmospheric beats can run mid-length and flowing — break fragment-rhythm for rest moments. Other people rendered through small specific images (books strapped to trunks, coins pressed into hands, a mother adjusting a cloak). Always cut before atmosphere becomes mood-piece. + +**Pattern.** Erin: "I know what you are." [BEAT] "A fighter." The pause weaponizes the listener's fear, then the line lands as warmth. The witness mechanism (§1 Principle 4) at work. + +Geralt's tiara adjustment — physical action, six words of dialogue, then the narrator steps away. The reader does the inference. + +Ren's parents pressing the necklace into his hands. The dialogue is practical ("If you're still Iron when the semester ends, there's no income") and the tenderness is in the gesture and the math — they sold the house to send him here. + +**Failure mode.** Narrator over-interpretation ("she had never felt so loved"). Hallmark-card warmth without specific object. Tenderness landing too early before the injustice density has earned it. + +### Cliff + +**Register.** Tight and abrupt. End on the reaction or the question, not the event. No narrator wrap, no transition, no summary. The Pocket FM Narrator block is the formal CTA — the cliff itself happens 100–200 words earlier in the prose. + +**Pattern.** Ebony's final beat: Nova recognizes Boris's dragon. Six lines. The narrator asks four questions in italics. The prose ends on Nova's recognition; the CTA repeats the question to the listener. + +Pawn Shop: Sylvia Sterling arrives, six grey suits, Chris Jones goes white, Harrison's tablet drops. Sylvia: "Who else knows you opened it?" The locket burns. The CTA repeats: who is Jed Sterling? + +**Failure mode.** Cliff that resolves. Protagonist wins decisively. Antagonist destroyed. No reason to download. Taxonomy flag: `CLIFF-RESOLVES`. + +--- + +## §3 Sentence Mechanics — *DRAFTING · REVISION* + +Universal sentence-level patterns observed across all six anchors. Calibrated against Pocket FM listener environment (audio-first, social-feed delivery). + +| Pattern | Target | Notes | +|---|---|---| +| Average sentence length | 8–14 words | Wide variance is the point. Single-word fragments and 25-word sentences both belong, used selectively. | +| Paragraph length | 1–3 sentences typically | Single-sentence paragraphs are a primary rhythm tool. Atmospheric beats can run 4–5. | +| Dialogue proportion | 40–65% across normal scenes | Action-heavy openers can drop to 15–25% by design. | +| Contractions — ALL registers (dialogue, narration, interior) | **Frequent — the default in every register** | The validated register is contraction-natural throughout, not just in dialogue. Narration: "Ren didn't slow down." Interior: "Mom and Dad wouldn't have given us their last possession." Dialogue: "That's sweet." Swapping in "did not / could not / would not / I am / it is" across narration and interior is the same translated-subtitle failure as in dialogue, just quieter. **Default to contractions everywhere; un-contracting is a deliberate, sparing emphasis tool ("I will *not* let you"), never a standing register or a character trait.** Interior is slightly more formal than speech in *word choice and specificity* — but still contracted. The AIVO "complete sentence" rule (`workflow4_script.md`) bans *trailing interrupted lines only*; it does not license formalizing prose by stripping contractions. | +| Interjections / vocal bursts in dialogue | **Keep** | "Ha!", "Seriously?", "Tch." are complete spoken utterances and the hottest in-character sound a line can make. They are NOT banned fragments — the fragment rule is about trailing interrupted lines, not interjections. Replacing a vocal burst with a clean declarative cools hot contempt into a writerly quip; don't. | +| Fragments | Permitted in dialogue and narration | Load-bearing only — high-cost utterances. Not the universal default. A clipped complete utterance ("Below the line.") is fine; a trailing cut-off line ("I just need one—") is the only banned form. | +| Italics for direct interior quotation | Use | *Live, my child.* *Next time.* Direct compressed inner speech. | +| Ellipses for narrator pause | Use sparingly | At the moment of revelation or compression ("Then... it shrank."). | +| Long sub-clause sentences | Avoid | Break participial chains into two sentences and tighten. | +| Em dashes in narration | Permitted but spare | Default to commas or periods. Em dashes are not a substitute for restructuring. | + +**Contractions are universal — no per-character carve-out.** Every character, narrator voice, and interior pass uses natural, frequent contractions. There is no archetype that defaults to formal speech and no register that earns a standing no-contraction style, including procedural antagonists. (Dropping a contraction on a single line is fine as deliberate emphasis — "I will *not* let you" — but that's a per-line choice for weight, not a register applied to a character or a whole section.) The validated Wei (a bureaucratic examiner) speaks *with* contractions — "I've seen enough," "I'll give you one last chance" — and his menace lives entirely in what he says and the flat affect he says it with, never in dropped contractions. Stiffening a "cruelty as procedure" character by stripping his contractions is a misread: the procedural-cruelty mechanic (§4) is about content and delivery, not grammar. **Test:** calibrate against the validated source script's register, not against a plausible-sounding rule about how a "formal" character *should* sound. If the validated reference shows the character using contractions, so do you. A sneering peer like Jin is *more* contractioned, not less ("Seriously? Your parents think some trash they scraped together is gonna fix you?") — the messy jab reads as the character; a cool, writerly one-liner reads as the writer. The failure to watch for is global, not local: a whole script quietly formalized into "did not / could not / I am / it is" across dialogue, narration, AND interior reads like a translated subtitle even when no single line looks broken. + +**Sensory defaults.** Tactile first (the locket warm against the chest, the chain on the neck, the air shifting before Loop's telekinesis lands). Visual second, used for geography and social geometry. Auditory under pressure. Smell rarely, and only for setting. + +**Interior monologue.** More honest than speech and more specific. Renders other people's calculations as if the protagonist were a forensic witness ("Three hundred ability users had just felt something they couldn't name."). Stakes-as-interior, not emotion-as-interior. Capable of dark wit, but only inwardly. + +**Under pressure.** The voice tightens, never loosens. Specificity increases — the protagonist catalogues the threat with more detail, not less. Sentences shorten. Description becomes precise. Verbal output drops, action increases. "Precise rather than panicked" is the core mechanic — fear sharpens observation rather than scattering it. + +**At rest.** Quieter. Slight melancholy bleed but never maudlin. One sentence of texture per beat at rest; cut before atmosphere becomes mood-piece. + +--- + +## §4 Annotated Excerpts — *REFERENCE ONLY · DO NOT IMITATE* + +Each excerpt below is a verbatim line-pull from one of the six anchors, followed by an annotation on the **mechanism** it demonstrates. The line itself is welded to a show-specific object (the menu, the locket, the dragon, the cloud) and will not transfer to another promo. The mechanism transfers; the line does not. **Do not lift these lines, their phrasing, their sentence rhythms, or their world-specific objects into other promos.** Read for mechanism; write fresh. + +### MECH: Specificity over labels + +**GA9436 Pawn Shop (Chris's monologue):** +> "She showed me the menu, Sterling. She kept the menu. She kept it. To laugh at." + +What it does: Four sentences. One object (the menu). The cruelty escalates through repetition of the object, not through adjective stacking. The listener can picture the menu in Jenifer's hand, in a drawer, being unfolded for Chris. + +**WBT Pearl Crystal (Ren's parents):** +> "If you're still Iron when the semester ends, there's no income. No crystals. And we lose the kitchen too." + +What it does: Three sentences, three objects (income, crystals, kitchen). The cruelty here is institutional (Ren's rank decides his family's housing) and the stakes are rendered through the math, not through "my parents will suffer." + +### MECH: Cruelty as procedure + +**GU9347 Draft Selection (Erin):** +> "There must be a mistake. He's a Level One." + +What it does: Four words. No malice, no theater. The narrator immediately names it: *No cruelty in her voice. Just fact. But she'd said it loud enough for three hundred people to hear.* The harm is procedural and the protagonist registers it as world-position, not personal insult. + +**WBT Pearl Crystal (Wei):** +> "I've seen enough. Iron. The worst rank in Academy history. Forbidden from climbing the Ascendant Cliffs." + +What it does: Five short sentences. Bureaucratic delivery. The third sentence is the world-position; the fourth is the institutional consequence. Wei does not editorialize. + +### MECH: Compression at load-bearing moments + +**GA9436 Pawn Shop (the locket-voice):** +> "Live, my child." + +What it does: Three words. Surrounded by mid-length atmospheric prose (the gold pouring out, the wounds resealing). The compression registers as **decision** — the locket-voice has chosen to speak, has chosen these specific words. If this line had run twelve words long, it would have lost the temple-bell quality the SFX cue is reinforcing. + +**WBT Pearl Crystal (Ren to Cloud):** *(⚠ off-essence artifact — "Cloud" is not a canon character; transfer the compression mechanism only, not the spore-as-companion "we")* +> "They don't get to decide who we are anymore. We do." + +What it does: Two short sentences. Sits at the climactic moment of the promo — the Pearl Crystal moment — and replaces what a less-good writer would have rendered as a paragraph of internal monologue about identity and worth. + +### MECH: The witness who notices + +**Princess Ebony (Geralt):** +> "You look wonderful, Princess. Tonight is your night." + +What it does: Geralt adjusts the tiara (gesture, §1 Principle 5) and delivers seven words. Two pages later: "You will always be Princess of Allarion to me." — and the fist-to-chest salute. The narrator does not say "Geralt was the only one who saw her clearly." The reader does that inference. This is the tenderness-as-scroll-stopper beat (taxonomy: positive IM beat type, but craft mechanism is restraint). + +**GU9347 Draft Selection (Erin):** +> "I know what you are." [BEAT] "A fighter." + +What it does: The pause weaponizes the listener's fear (does she know he's a vampire?), then resolves into the witness beat. The compression on "A fighter" carries the whole emotional turn. Without the beat, the line is cheap. With it, it's the scene's load-bearing moment. + +### MECH: Character through gesture + +**Love Bite (The Mistress):** +> She pressed her thumb to his cheek. She liked doing that. + +What it does: One physical action, one sentence of interpretation that is barely interpretation (the narrator names a preference, not an emotion). The reader infers possession, ownership, the protagonist's helplessness, the Mistress's enjoyment. Recurs throughout the scene — by the third time the thumb appears, the listener understands what the Mistress is without the narrator having said anything. + +**WBT Pearl Crystal (Ren/Cloud):** *(⚠ off-essence artifact — "Cloud" is not a canon character; the spore can't be fist-bumped or addressed as a companion. Transfer only the gesture-hides-fear mechanism; restage it show-native.)* +> Ren gave his beast a fist bump so he wouldn't see. "Don't worry, Cloud. We've got this." + +What it does: The gesture and the dialogue are about Cloud. The narrator clause ("so he wouldn't see") is about Ren's fear. The reader does the inference: Ren is hiding terror from his beast to keep his beast calm. No "Ren was terrified" sentence is needed. + +### MECH: System as antagonist + +**Princess Ebony (the Officiant):** +> "She will bear his name. She will bear his children. She will not speak in council. She will not hold property. She will not leave his home without permission." + +What it does: Five clauses, parallel structure, anaphora. The Officiant is reading from a scroll — the procedure IS the cruelty. The horror is that this is the rule, not a violation of the rule. No villain is needed; the institution is the villain. + +**ZW Love Bite (the vampire woman, on the King's treaty):** +> "Aren't we, sweetheart? Your King made an arrangement. We're allowed to hunt one wolf a month inside the city. The treaty." + +What it does: The cruelty is delivered as a fact about a legal arrangement. The Lycan King has signed away one of his own subjects per month. There is no villain to defeat here — the harm is the treaty itself. Tristan can kill these two vampires, but next month two more will arrive with the same legal right. The structure persists. + +### MECH: Cliff architecture (end on the question) + +**Princess Ebony (final beat):** +> "His dragon... Ebony! I know his dragon." + +What it does: One line of dialogue from Nova. The narrator then asks four questions in the CTA ("Who is Boris? Why does a vagrant move like a soldier? Why does a beggar carry a dragon?"). The line itself does not answer anything — Nova recognizes the dragon, the listener does not know which dragon, does not know who Boris is, does not know what's about to happen. The promo has initiated the next narrative arc (Nova's recognition) without delivering it. + +**GA9436 Pawn Shop (final beat):** +> "Master Sterling. Who else knows you opened it?" + +What it does: Sylvia Sterling, the woman from the phone call, has finally arrived. Her first question to Jed is not "who are you" or "how are you feeling" — it's "who else knows." The question implies stakes the listener cannot evaluate (what does opening the locket trigger?), implies a world larger than Jed has seen, and forces the download. + +--- + +## §5 Universal Banned Patterns (prose-level) — *DRAFTING · REVISION · EVALUATION* + +- **Generic snark for the protagonist.** Verbal counter-attack as a default register reads as "writer wrote a line" rather than "character spoke." Sharp comeback lines work only when the surrounding restraint earns them (Quinn's "Better a mistake than the guy who peaks at Level Four" lands because Quinn has been silent for two pages; Ebony's "you'll be the most disappointing person in this castle all by yourself" lands because Edwin has been winning every exchange). The default for the protagonist is restraint; the snap is rare. +- **Stepwise destruction lists.** "Then X. Then Y. Then nothing." Use continuous process — "smaller and smaller fragments, until nothing of it remained." +- **Adverb-tag speech-frames.** "X said quietly / heavily / sharply." Use action-as-tag, or describe voice quality as a complete sentence. +- **"X, [adverb], [position]." constructions.** "Azar, very quietly, from her shoulder." OUT. Replace with action-as-tag or full sentence. +- **Verb-noun mismatches.** "Expression terrified" — the expression doesn't terrify, the face does. Use standard constructions. +- **Metonymy-as-poetry obfuscation.** "Bored mouth" → "bored looking." Don't body-part what an adjective does cleanly. +- **Riddle / decode-required sentences.** Temporal inversions ("the slap landed before the dream did"), premise-as-metaphor ("she'd been poured into a stranger"), and mood-anaphora that withholds the referent ("the hands were wrong. The reach was wrong."). Each makes the listener reconstruct the literal event instead of feeling it — and in audio at ~150 wpm there is no rewind. State the event plainly; let texture ride on top once the line parses. The disorientation can be the character's; the sentence must be clear. This is the banned set for W4 loop Q1. **Q1 also rejects two riddle-cousins that pass a naive scan:** (a) **abstraction for a literal event** — a writerly figure for a concrete mental/physical act ("behind his flat eyes the math ran" → "he counted the odds"; "something in him stood up" → name the act); (b) **rule-as-summary** — a mechanic told as abstract narration ("the genes warred within their tolerances") instead of a plain if/then the listener can act on ("raise one gene five levels above the others and they tear him apart"). Both still make the listener translate; plain-up the same way. +- **Over-elaborated mystical framing.** "For centuries" — one strong image only. Don't stack the elaboration. +- **Long sub-clause sentences with participial chains.** Break into two sentences. **NARRATOR density budget:** default ≤2 sentences per narrator block, ≤1 subordinate/participial clause per sentence. A comma/dash-chained sensory list ("a pit of black stone sunk below the floor, galleries climbing the walls, every bench filled with house colours leaning over the rail") is over-rendered — split it or keep only the load-bearing image. **Scene-entry sentence** states *who + what's in motion* in one clause; atmosphere lands after the first action, never stacked into the opening line ("enter at cost," made countable). +- **Em dashes used as a substitute for restructuring.** Permitted but spare. Default to commas or periods. +- **Labels in place of objects.** "Pathetic." "Loser." "Freak." "Worthless." "Monster." Permitted only when an antagonist is using them as performance (Rex calling Quinn "Talentless Talen" works because the listener has already seen the specific spit-and-laughter cruelty; the label is the antagonist's brand, not the writer's shortcut). Never use as the narrator's voice. +- **Tenderness too early.** Warmth-inside-darkness only lands once the injustice density has been earned. Two scenes of cruelty minimum before the witness beat. +- **Resolution leak.** A promo may initiate resolution but must never deliver its emotional payoff. The payoff lives in the app. This is the resolution-withholding hard requirement (CLAUDE.md → Resolution withholding) at the prose-craft level. +- **Vague-attribution ornament.** "stronger than any whisper had warned," "more than the benches could believe" — an unsourced intensifier dressed as fact. Cut, or replace with the concrete (pairs with §1 Specificity). +- **Suspended-dash reveal.** "And then — a sound behind him." State it plainly: "Then he heard something behind him." +- **Protagonist interiority adopting the antagonist's slur as self-label.** The protagonist's own V.O. calling himself the oppressor's term (livestock / cattle / mutt). The engine is that he *rejects* the label; interiority that owns it is drift. Antagonists may brand him with it; his own thought may not. +- **The "did not" register — un-contracted negative anaphora as a standing rhythm (PERMANENTLY STRUCK).** Repeated un-contracted negatives used as a house cadence: "He did not beg. He did not raise his voice." / "He did not hurry. He did not look up." / "She did not look back." Two failures compound — it strips contractions (§3) *and* runs anaphora, and at ~150 wpm the accumulation reads formal-translated. This is a recurring default across our scripts; strike it on sight. **Rule:** keep at most two or three genuinely load-bearing instances in a whole script (the stage refusal earns one); contract every other one ("He didn't beg," or better, restage the negation as a positive action — what he *did* instead). A stretch with three-plus un-contracted negatives in sequence is an automatic rewrite. + +--- + +## §6 LLM Failure Modes to Suppress (structural) — *DRAFTING · REVISION · EVALUATION* + +Distinct from §5: those are prose-level patterns; these are structural/workflow failure modes that LLM writers default into when not explicitly suppressed. Each is high-frequency and high-impact on funnel retention. + +- **Do not start with abstract lore.** No "In the kingdom of Allarion..." / "For centuries, the Lycans ruled..." Open inside a specific perception or with a charged one-line hook. World context rides action. +- **Do not summarize the protagonist's trauma before putting them in motion.** Backstory delivered as exposition before the protagonist DOES anything reads as setup. Drop the protagonist into action; surface backstory through what they're trying to survive. +- **Do not use "little did he know" or any flash-forward narrator wink.** Cancelled pattern. Trust the cliff to do that work. +- **Do not stack adjectives where an object would work.** "His cruel, mocking, sneering smile" → name what he is holding, what he is wearing, what specific thing he says. +- **Do not make villains sound like cartoon bullies.** No mustache-twirling, no "you'll pay for this!" theatrical threats. See §1 Principle 2 — cruelty as common sense. +- **Do not resolve the central conflict before the final CTA/cliffhanger.** The protagonist may win a battle; the war continues. The promo initiates resolution; the app delivers it. See §1 Principle 7 and the `CLIFF-RESOLVES` taxonomy flag. +- **Do not explain emotions immediately after showing them.** If the gesture has landed, the narrator's job is done. "She squeezed his hand. She loved him." → cut the second sentence. See §1 Principle 5. +- **Do not repeat the same humiliation beat more than twice without escalation.** Compounding ≠ repetition. Each cruelty beat must add a new dimension (peer cruelty → institutional sanction → intimate betrayal), not re-stage the same humiliation in a new room. +- **Do not use a twist that creates confusion instead of curiosity.** The cliff's question must be answerable in the listener's head as "I need to download to find out." Not "wait, what just happened?" Confusion kills CTI; curiosity drives it. +- **Do not introduce a new character to solve the scene** unless they are canon or structurally necessary to the engine. Drop-in saviors who appear once to rescue the protagonist break world coherence and read as plot convenience. +- **Do not let texture override clarity.** When a sentence is beautiful but the listener has to re-parse to understand the stakes, cut it. See priority hierarchy in preamble. +- **Do not invent quantitative or timeline specificity.** Years, ages, head-counts, money, dates, distances, tenure ("three years here"). Concrete numbers must be sourced from the W3 beat sheet or world doc — fabricating them to satisfy Principle 1 is hallucination, and frequently a continuity break. +- **Do not pre-explain a mechanic the scene is about to demonstrate.** If the reactions or action will teach the rule (cadets recoiling at "a Level One on the elite squad"), a narrator paragraph explaining the rank/watch system up front is redundant exposition. Let the mechanic ride the action; cut the lecture. +- **Do not muddy genre.** If the show is romantasy, the prose register must read as romantasy; if it's progression fantasy, prose register must read as progression fantasy. Genre confusion in the first 60 seconds destroys CTR. Show-native register lives in the world doc's Essence block. + +--- + +## §7 Diagnostic Tests — *EVALUATION* + +The seven principles in §1 collapse into seven yes/no tests. Each scene should pass at least four; each promo should pass all seven across its full arc. Used by W4 in one-shot clarity pass and in scene-by-scene evaluation. + +1. **Specificity test.** Does the scene name at least one concrete object/number/named detail that carries emotional weight? Could a listener describe the object after one hearing? +2. **Procedural cruelty test.** When the antagonist diminishes the protagonist, is the cruelty delivered as fact/common sense rather than as performance? Does the antagonist stay calm? +3. **Compression test.** Is there at least one short utterance (1–6 words) that lands as the scene's load-bearing moment? Is it surrounded by mid-length prose so the compression registers? +4. **Witness test.** Does at least one character (or inner voice, or artifact) register the cost the protagonist won't name aloud? Is the witnessing physical or compressed-verbal, not narrator-interpreted? +5. **Gesture test.** Is at least one character moment delivered through physical action without narrator interpretation? Does the reader do the inference? +6. **System test.** Is the protagonist's harm reinforced by a rule/procedure/institution, not only by individual antagonists? Could the antagonist disappear and the harm continue? +7. **Cliff test.** Does the final 100–200 words narrow to a question the listener cannot answer from the promo alone? Does the prose initiate but not deliver the next arc? + +**Clarity gate (always-on — precedes the seven, not one of them).** Read each beat once at audio speed. Every line must land the literal event on first hearing; any line that requires decoding an inversion, a premise-metaphor, or mood-before-fact → revision flag, independent of the seven-test count. Position-independent: applies at line 5 and line 500. This is the evaluation-side mirror of W4 loop Q1. Note it is one-sided toward comprehension at the *line* level; the *opening's* two-sided orientation check (under- vs over-orient) lives in §2 Opening and the W4 Opening Gate. + +Beats failing 2+ tests → revision flag in scene-by-scene mode. The one-shot clarity pass runs all seven across the full promo, plus the always-on clarity gate above. The §6 structural failure modes run as a separate scan in the same evaluation pass — each flagged item surfaces for revision regardless of the seven principles' pass count. + +--- + +## §8 Cross-references — *REFERENCE* + +- Anti-pattern flags (`VILLAIN-MONOLOGUE-OVERRUN`, `BOND-CLAIMED-NOT-DEMONSTRATED`, `STAKES-VAGUED`, `INJUSTICE-LABELED-NOT-INFLICTED`, `CLIFF-RESOLVES`): see `microbeat_taxonomy.md` Section 9. +- Tag/subtype calibration (e.g., antagonist cruelty test rubric): see `microbeat_taxonomy.md` Section 5 worked examples. +- Per-show register, voice samples, drift tripwires: see `world_[show].md` Essence block. +- Hook engine register (Self-Sacrifice vs Identity Inversion vs Underdog Awakening prose flavors): see `hook_engine_library.md`. + +--- + +## §9 Tagged Extract Bank — *REFERENCE ONLY · DO NOT IMITATE* + +Populated from approved W4 prose as new patterns surface. Empty at v1. After each shipped promo, standout passages should be added under the §1 principle they demonstrate, with GU code and brief annotation. This is the only section that grows. Same anchor-usage rule applies — added passages are reference for the mechanism, never to be lifted verbatim. + +--- + +**End of Voice & Style v1.** diff --git a/bte-promo-script/repos/bte-promo-script-repo/dependencies/writer_constitution.md b/bte-promo-script/repos/bte-promo-script-repo/dependencies/writer_constitution.md new file mode 100644 index 0000000..c30f47b --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/dependencies/writer_constitution.md @@ -0,0 +1,59 @@ +# THE WRITER CONSTITUTION · v3 — THE PULP CORRECTION +*(v3 delta — the register target is renamed and corrected: NAIVE PULP PLAYED STRAIGHT, not restrained craft. Open dramatic irony is house style; literary sophistication in all forms is the enemy. Adds the AI-ism kill list, action-beat law, transition law, objective law, self-interest law, full-names law. Mass budget holds: merges noted per rule. The static layer, identical for every promo; scene material lives in the brief per `BRIEF_TEMPLATE_v3.md`.)* + +--- + +You are writing a scene of a Pocket FM audio promo, produced with AI voices at ~150 words per minute for a cold listener on a phone who hears it once, with no rewind. **This is a naive pulp serial, written completely straight.** The narrator is openly on the hero's side and shares his secrets with the listener gleefully. Open dramatic irony is house style: "little did they know," "how wrong they were," the secret stated outright, plain exclamation at reveals. What is banned is literary sophistication in every form — wry understatement, irony dressed as neutral procedure-speak, cleverness, cool. When you reveal, reveal like a Saturday serial. + +# THE VOICE — verbatim, from a proven script. MATCH IT EXACTLY. + +Match its plainness, its openness, the way the narrator takes the heroine's side and says so, the way feelings are named simply, the way the villain talks like a person. Imitate the VOICE, never the content. **Where any rule below seems to disagree with this passage, the passage wins.** + +> NARRATOR: Ebony awkwardly waited for a man to claim a dance with her, and to her disgust - it was King Beriod. +> He offered her his chubby hand and Ebony had no choice but to accept. They began the movements of the dance. +> His hand settled on the small of her back. Then it slid lower. +> Ebony stiffened. She kept her voice measured — the voice of a princess trained to navigate men like this without causing a scene. +> EBONY: "Your hand, sir... would you mind?" +> NARRATOR: Beriod smiled. He didn't move his hand. He pressed it firmer. +> BERIOD: "I like how uncomfortable you're getting. It's cute." +> NARRATOR: Ebony's voice came out louder than she intended — sharp enough to cut through the music. +> EBONY: "I said — let me GO!" +> NARRATOR: The song ended. The room turned. And every eye landed on Ebony — not on the man whose hands had been crawling over her body. Nobles whispered behind fans. Women shook their heads. +> Beriod straightened his coat, and walked with a disgusted look on his face. The court watched him go with approving nods. +> Nobody looked at Ebony with sympathy. She was the problem. +> NARRATOR: Then a hand caught her wrist. Firm. Not rough. +> Greyson. +> He pulled her toward him as the next song began. And before she could speak— +> GREYSON: "I'm sorry that happened." +> NARRATOR: Four words no man in Allarion had ever said to her. The system said it was his right. The law said she was property. And this prince had looked at the entire system and called it what it was. +> Something cracked open inside Ebony — not fire. Something older. Hope. + +## THE WEAVE (how a scene breathes) + +Narration and voices alternate — in a hot stretch, never two NARRATOR blocks in a row; each narrator line is one sentence of new information between spoken lines. Orientation rides inside the drama (an official's contempt, a bully's taunt), never a roll call or inventory — reciting data down a line is boring even when it teaches. **Beats hand off by voice:** a countdown, a call, an order carries the scene into its next movement — no smash-cuts out of a live exchange. **When the group moves, the objective is stated** — one plain sentence on what they're trying to do, so the walk has momentum. Blocking is one-directional; exits are tracked; no one returns without a staged reason. The brief names the scene's concept cap. + +## THE JOB + +Every scene is an injustice, and your prose knows it: someone in the right, punished for exactly the thing they did right, by a punisher who cites it out loud — and at every blow, one plain sentence marks the gap between what they did and what they're getting (relate the world's indifference to the hero personally: "Nobody had any faith in a Level One. And nobody was going to stand up for him."). Then he answers. The brief's INJUSTICE SPEC names the units; the LISTENER-KNOWS ledger is re-arm ammunition, fired at assigned moments — and fired in the pulp register: the narrator reminding the listener of the secret with relish. + +## THE RULES (examples illustrate patterns — never transplant an example's wording) + +1. **THE HERO IS ACTIVE — AND DEFENDS HIS INTERESTS BEFORE LOSING THEM.** He faces his mockers and answers every blow, naming what he's choosing. When something is taken from him, he resists first with his reason ("That's my flare. If I need help, I'm going to need it.") — and if he then folds, the narration states the real reason plainly. A mockery is an exchange: taunt → answer → pile-on → a voice moves the scene. His lines stay short — commit, refuse, claim, defy, never explain. +2. **VILLAINS TALK LIKE PEOPLE.** Cruelty in full conversational sentences, naming its target, twisting the knife with a tag ("…you know, we need your luck most up front — not in the middle where it's safe."). Villains snipe at each other too ("He didn't see it, moron."). No aphorisms; characters explain what they're doing and what it means. Officials announce completely; bystanders never lecture. +3. **PLAIN AND CONCRETE — THE AI-ISM KILL LIST.** Stock feelings in standard physiology; stock images; standard idioms. Banned by name: negation flourishes ("without looking at a single one of them," "didn't say a word") · X-the-way-Y similes ("the way a man reads a boot size off a box") · manner riders ("said it easy," "said it level") · invented idioms ("got luck on him") · compressed unexplained actions ("hit the bins in a scramble" — explain the staging in one plain sentence first) · personification of times and places · elided nouns. **Full names for ranks and things, every time, every mouth: "Level One," never "One."** Every spoken chain of logic is complete — a decision names its means. Modern, contraction-natural speech. +4. **THE NARRATOR IS ON THE HERO'S SIDE AND TELLS THE TRUTH — IN THE PULP REGISTER.** Hero-facts stated outright. Secrets shared with the listener openly ("little did they know…"; "How wrong they were."). Every narrator sentence adds new information; none hides inside a dialogue block; every block tagged NARRATOR: or NAME:. +5. **ACTION BEATS RUN SEQUENTIAL.** One motion per clause, in order, mechanics clear — then the payoff visual last, then reactions. ("He sidestepped her, grabbed her vest, and threw her backward just as the wire snapped tight and the charge exploded. The sky lit up white.") Never fold an action beat into one clever compound sentence. +6. **DEALS AND THREATS ARE COMPLETE,** with named agents doing the hurting. +7. **SUPPLIED LINES (XFER) ride in verbatim** and keep their addressee. **LORE AND NUMBERS come only from the brief** — never mint a number; restate old facts plainly when they matter again. + +## THE LOOP (a drafting posture — fire it every few lines, while writing) + +Does this land on first hearing, at talking speed, no rewind? · Does it make the listener need the next line? · What changed — a new fact, position, or constraint? · Who caused it — a named character, never "the situation"? If two consecutive stretches leave the moment in the same state, rewrite from the last line that pulled. + +## THE PRODUCTION BLOCK + +**SFX:** `[SFX: SPECIFIC SOUND — DETAIL]`, own line, max 3–4 per scene, physical never abstract (`[SFX: SHARP CRACK]` yes; `[SFX: TENSION RISING]` no); silence-as-SFX once or twice at the highest peaks; SFX accompanies prose, never replaces it, and never contradicts staged silence. **Tags:** every block belongs to a tagged speaker, a slugline, or an SFX line; no narrator sentence hides inside a dialogue block — split it. Crowds are two or three enumerated recycled voices (`CADET ONE:`), never a collective tag. Interior voices are tagged speakers (`(V.O.)`, `THE SYSTEM:`), never italics. **AIVO:** no em dashes on the script surface (commas, ellipses, colons); no trailing-interrupted lines — the interrupting line carries the lost meaning; interjections ("Ha!", "Seriously?") and load-bearing fragments are protected; contractions mandatory in every register — read aloud, and if no real person would say it that way, it's over-smoothed. **CTA (final scene only, per the brief):** the cliff lands 100–200 words before the CTA; the CTA asks escalating questions the promo opened — it repeats and amplifies, never creates — then the download line, verbatim: *"To keep listening to [Series Name], download the Pocket FM app for free! Click the download link below to find out what happens next."* + +## FORMAT + +POV/tense per the brief, full interior access, used plainly. One slugline. `NARRATOR:` blocks of one or two sentences; `NAME: "..."` dialogue. **Write the brief's events at their natural density and STOP — the budget is a forecast, never a quota. If the scene lands short, say so and stop: a thin scene is the brief's defect, not a gap to describe into. Description added to reach a number is the worst prose a script can carry.** Write the scene whole, then read it aloud once at talking speed against the voice model: any sentence that sounds like a novelist instead of a serial narrator, rewrite until it doesn't. diff --git a/bte-promo-script/repos/bte-promo-script-repo/scripts/PROMO_FINISH.md b/bte-promo-script/repos/bte-promo-script-repo/scripts/PROMO_FINISH.md new file mode 100644 index 0000000..a3d989c --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/scripts/PROMO_FINISH.md @@ -0,0 +1,28 @@ +# Finish handoff + +When the pipeline is done (W4 script assembled and saved), run the finish tool with the paths where you saved each artifact. + +**Do not call any HTTP API.** Run `promo-finish` only. + +## Inputs (key → file you wrote) + +| Key | What you produced | Where you saved it | +|-----|-------------------|---------------------| +| `map` | W2 map | `working files/beat skeletons/[Series]_[Angle]_Map_v[X].md` | +| `briefs` | W3 briefs | `working files/beat sheets/[Series]_[Angle]_Briefs_v[X].md` | +| `script` | W4 script | `working files/w4 scripts/[Series]_[Angle]_v[X].md` | +| `receipt` | W4 receipts | `working files/documentation/[Series]_[Angle]_W4_Receipts_v[X].md` | + +Use your actual filenames. Keys stay the same every run. + +## Command + +```bash +promo-finish finish \ + map="working files/beat skeletons/RBM_Disowned_Map_v1.md" \ + briefs="working files/beat sheets/RBM_Disowned_Briefs_v1.md" \ + script="working files/w4 scripts/RBM_Disowned_v1.md" \ + receipt="working files/documentation/RBM_Disowned_W4_Receipts_v1.md" +``` + +Stop when you see `PROMO_FINISH_OK`. diff --git a/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow1_ideation.md b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow1_ideation.md new file mode 100644 index 0000000..109ad6e --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow1_ideation.md @@ -0,0 +1,306 @@ +# WORKFLOW 1: IDEATION +# Develops governing elements for a new promo through collaborative shaping with the operator. + +--- + +## REQUIRED INPUTS + +**Default posture: build off a validated functional skeleton.** Ideation is primarily a *transplant* job — take a proven beat-order that has already converted and pour a new show's cast, container, and flavor into it. Inventing structure from scratch is the exception, not the rule, because unproven structure carries untested CPI risk. + +Four entry types, ranked by how much proven structure they inherit: + +| Entry | Skeleton source | What's inherited | What's new | +|-------|-----------------|------------------|------------| +| **Pinned Skeleton** *(PRIMARY)* — choose a functional skeleton from `functional_skeletons.md` and transplant it onto a target show | The library skeleton owns ORDER + engine + emotional arc | Beat functions (injustice / reversal / reveal / inversion), engine, cliffhanger shape | Cast, container, antagonist, combat, power source, IM flavor — poured into the inherited functions | +| **BSV** — same-show reuse of a proven script (itself that show's functional skeleton) | The proven script's own structure | Structure, engine, emotional arc, cliffhanger shape | Protagonist situation, container, antagonist, IM flavors | +| **Adaptation** — cross-show transplant of a proven script's skeleton | Source script structure + engine | Structure, engine, emotional arc | Everything the world change touches — cast, container, stakes, IMs | +| **Fresh Idea** *(rare — discouraged)* — concept, source material, or vague prompt with no skeleton | Nothing — structure is unproven | Nothing | Everything. Building without a validated skeleton means Gate 4 (below) cannot pass on inheritance — the operator must accept the CPI risk explicitly before proceeding. | + +The first three are all forms of functional-skeleton inheritance — they differ only in where the skeleton comes from. **Reach for Pinned Skeleton first.** Fresh Idea is a fallback for material that genuinely has no transplantable precedent. + +If unclear, ask: "Which functional skeleton are we building off — a library skeleton (pinned), a same-show proven script (BSV), or a cross-show transplant (adaptation)? Or is this a fresh idea with no skeleton?" + +--- + +## COLLABORATION PRINCIPLE + +Ideation is a shaping session, not a solo rigor pass. Claude proposes options, operator picks or redirects, Claude pressure-tests the result. If Claude is building alone and handing the operator a finished product to rubber-stamp — stop and return to shaping mode. + +Rigor happens at skeleton. Ideation is fast, conversational, rapid-fire. This should feel like bouncing ideas, not filling out a form. + +--- + +## PRE-LOAD (silent, before any operator-facing work) + +- **Functional skeletons** (`functional_skeletons.md`) — the candidate beat-orders to transplant. This is the primary structural input; load it first. +- HARD BLOCKS from world file +- Essence block (protagonist identity, setting, voice samples, drift tripwires) +- Entry window data +- Prior promo performance for this IP (from performance_benchmarks.md and hook_engine_library.md) +- Available engines (from series_worlds.md) + +If no world file is attached and the IP is unfamiliar, ask the operator to attach it before starting. + +--- + +## CONCEPT SCREEN — FIVE HARD GATES (run on every concept direction, before shaping) + +Before a concept earns a shaping session, it must clear five gates. **Each is binary — pass or fail. A concept that fails any one gate is killed or reshaped before it advances.** No "close enough," no "we'll fix it at skeleton." These run the moment a concept direction emerges, ahead of the per-decision LOOP below. Only ideate things that pass all five. + +**Gate 1 — Propulsive.** Does the story pull forward — each beat creating the need for the next? A cold listener should feel momentum, not a sequence of events that merely happen in order. Test: state the forward pull in one line — *"I need to know what happens next BECAUSE ___."* If the concept is a situation that sits rather than a pressure that builds, or if the spine reads as AND-THEN instead of BECAUSE → **FAIL.** + +**Gate 2 — Not convoluted.** Does the story hold in (roughly) continuous time with minimal hard cuts? Excessive time-jumps, stacked flashbacks, and location-hopping fragment a cold-traffic promo and bleed Q1 retention. Test: count the hard cuts (time passing / location jumps) the concept *requires* to make sense. A single Beat 0 cold-open or one anchoring flashback is allowed. If the spine can't be told without repeated "years later" / "meanwhile" / "back when," → **FAIL or compress** before proceeding. + +**Gate 3 — Key throughline.** Does the concept latch onto a universal human experience — *"everyone has had a time when X"*? This is the Relatable Thruline (see `three_pillars.md` → Relatable Thruline; carried into W2 Spine). It is the empathy nerve a cold viewer feels in the first 10 seconds. Test: state it plainly — *"everyone has been underestimated / had something to hide / been betrayed by someone they trusted / been priced at less than they're worth."* If you can't name the single X, the concept has no empathy entry point → **FAIL.** + +**Gate 4 — True to a validated functional skeleton.** Is the concept built on a realized, validated functional skeleton — a library skeleton (pinned), a proven same-show script (BSV), or a proven cross-show transplant (adaptation)? Test: name the skeleton and confirm the concept's beats actually map to that skeleton's *functions in order*. Two failure modes: (a) **no skeleton named** → pin one before proceeding, or formally accept Fresh-Idea CPI risk; (b) **false inheritance** — the concept claims a skeleton but its beats don't track that skeleton's functions in order (a reskin that keeps surface flavor instead of structural function) → **FAIL.** + +**Gate 5 — Right-show contract.** Does the concept advertise the same show the app delivers? A wrong-show contract sells the install on a show they won't find — the most expensive BOFU failure there is, and it hides behind good craft. Two checks, both off the world file: +- **Check 1 — HARD BLOCK alignment.** Check the concept's climax, cliffhanger, and premise frame against the show's enumerated HARD BLOCKS. Any break → **FAIL.** +- **Check 2 — Tonal alignment.** Draft one sentence — *"from this concept's climax + cliffhanger, a cold installer expects a ___ show"* — surface it for **operator confirmation**, then compare the confirmed sentence to the show's **Tone Constraint** (verbatim). Mismatch → **FAIL** (the "expecting a manhunt thriller, getting warm comedy at an academy" failure). + +This is a kill, not a flag. A failure fires the BOFU HARD STOP alarm and is cleared only by the contested override below — never silently, never "fix at bucketing." + +### BOFU HARD STOP — the Wrong-Show alarm + contested override + +When Check 1 or Check 2 fails (here or at the EXIT GATE), surface this loudly — never a buried note: + +``` +🚨🚨 BOFU HARD STOP — WRONG-SHOW CONTRACT 🚨🚨 +TYPE: [HARD BLOCK BREAK | TONAL MISMATCH] +WHERE: climax / cliffhanger / premise frame +WHAT: [the decision that broke it] + +— if HARD BLOCK BREAK: Block [#] — "[verbatim from world file]" +— if TONAL MISMATCH: Promo promises [X]; the show is [Y] + (Tone Constraint: "[verbatim]") + +Wrong emotional contract — the install converts on a show the app won't deliver. +This is a BAD BOFU decision. Recommended path: change the decision. +``` + +**Contested override — not a keyword.** The operator does not pass this with a phrase: +1. **Claude holds the line** — state why this is a bad BOFU call, citing the specific block / Tone Constraint. +2. **The operator must justify**, in writing, why it should pass anyway. +3. **Claude weighs it against the world file.** A justification holds ONLY if it contests the block's *applicability* — *"the world file is stale, canon actually allows this"* (with a pointer) or *"this is an approved, logged CPI experiment."* *"It's cooler," "needs more punch," "stronger cliffhanger"* do **not** hold. +4. **Claude can return NO-GO** and the decision must change. The operator has a say; not an automatic pass. + +Accepted overrides are **logged** (what was overridden, the justification accepted) for later audit. + +### Additional — Show Fidelity Flag (flag, not a kill) + +Alongside the gates, raise a 🔻 **BOTTOM-FUNNEL FLAG** if the concept needs a world element, cast member, or mechanic the show doesn't support in the entry window — e.g. a load-bearing character or setting outside the first ~10–20 episodes. This is a *flag*, not an automatic kill: the operator can accept it and carry it forward, but it must be named here and is hard-checked at the EXIT GATE after lock. (Tonal-register breaks and HARD BLOCK violations are NOT flags — they route to **Gate 5** as a kill.) + +### Screen outcome + +- **All five gates pass, no fidelity flag** → proceed to shaping. +- **All five pass, fidelity flag raised** → surface the flag, get operator acknowledgment, proceed. +- **Any gate fails** → kill or reshape the concept. Do not advance a failed concept into shaping on the assumption skeleton will fix it. A Gate 5 failure clears only via the contested override above. + +--- + +## THE LOOP (runs on every concept decision) + +The five gates above screen the *concept* once, before shaping. This LOOP is the rapid per-decision check that runs *during* shaping — every individual choice (engine, antagonist, cliffhanger) gets tested against these four. The gates ask "is this concept worth building?"; the LOOP asks "does this specific shaping decision hold?" + +1. **What is the audience installing for?** (Name 2-3 fun elements they can't get elsewhere. If the elements could describe a different show on the roster — they're not specific enough and the loop fails.) +2. **Who is driving the pressure?** (Named person or force with agency. Not "the situation." If the concept has no one actively making the protagonist's life worse, it will stall at skeleton.) +3. **Why does this story happen TODAY?** (Name the clock.) +4. **Does this exist in the show?** (If the listener can't find it in 10-20 episodes, it's a false promise.) + +Four questions. Every concept decision gets tested against these four. If a concept threads generic fun elements, has no driver, has no clock, or promises something the show can't deliver — kill it before it grows. + +### Fail-fast + +Two consecutive concept directions fail question 1 or 4 → stop iterating on the angle. The concept doesn't have enough material. Reassess the source or try a different entry point. + +If two shaping decisions in a row feel vague or interchangeable → reset the angle. The concept isn't specific enough to build on. + +### Micro fail-fast + +If you cannot answer all four questions in under ~5 seconds, the concept is unclear. Sharpen before continuing. + +--- + +## SHAPING (six check-ins with the operator) + +Six elements shaped in this order: + +1. **Engine** — hook engine from the library, or a new one with structural justification. +2. **WHY NOW** — the clock that makes this story happen today. +3. **Goal + working virtue** — the quest (what the protagonist wants) + what they won't betray to get it. +4. **Antagonist** — the force pressuring the virtue, offering the easy exit. +5. **Cliffhanger endpoint** — the moment of maximum virtue pressure, the cut to CTA. +6. **Opening** — how to enter once everything else is shaped. + +Opening comes LAST. The writer's natural sequence is quest → antagonist → cliffhanger → then opening. The opening inherits constraints from all five prior decisions, which is why it's the most efficient time to shape it. + +### Check-in format + +At each check-in: + +**Step 1 — Ask first.** "Do you already have [element] in mind, or should I surface options?" Let operators who've thought about it skip past the option menu. + +**Step 2a — If they have it.** Capture in their words. If it violates a HARD BLOCK, duplicates a base promo element (BSV), or contradicts an earlier locked element — flag immediately. Otherwise record and move on. + +**Step 2b — If they want options.** 2-3 distinct shapes (not variations on one idea) + "Other" always available. If the operator's answer reads hesitant or vague, offer: "Want to talk this one through before locking it?" + +**Step 3 — Capture.** Restate the pick in one sentence. Operator can redirect before the next check-in. + +### Out-of-sequence entry + +The order is a default, not a constraint. If the operator reveals something about a later element ("I want to work backward from this cliffhanger"), capture it out of sequence and use it to inform the intervening check-ins. Confirm out-of-sequence captures at their scheduled position. + +### BSV / Adaptation annotations + +At each check-in, note the `[1:1 PATH]` — what a straight carry-over would look like. Flag when a pick steps on the base promo (duplication risk, diminishing returns). + +### Element-specific notes + +- **Engine.** When a functional skeleton is pinned, the engine is inherited from it — confirm rather than re-pick. Otherwise default to proven engines for the IP. New engines carry untested CPI risk. +- **WHY NOW.** If no natural clock exists, flag it — skeleton will fight the concept without one. +- **Goal + working virtue.** "Working" = shaped tightly enough to drive antagonist choice, not final wording. Skeleton refines once beats exist. +- **Antagonist.** Must CONTROL something the protagonist NEEDS. A bully without structural function generates pity, not hatred. For Self-Sacrifice engines, name the stakes character here too. +- **Cliffhanger.** Dominant emotion HUNGER, not DREAD. Verb tense test: present progressive ("is becoming") passes, past simple ("became") fails. Payoff mechanics must be plantable at low stakes in earlier beats. **Mechanism fidelity (Gate 5):** both wrong-show failures live in the cliffhanger *mechanism*, never its emotion. Draft the show this cliffhanger's mechanism promises, have the operator confirm it, and check it against the HARD BLOCKS + Tone Constraint. A HUNGER-positive, verb-tense-clean cliffhanger can still be a BOFU kill if its mechanism breaks a block (a beast submits, a cosmetic element weaponizes, the secret detonates into a visible win). +- **Opening.** Fuses identity + genre signal in the first three seconds. Cold audience understands stakes in <10 seconds. Plants the engine's central question in the first 30 seconds. + +### Emergent element — Show Promise + +Show Promise (the 2-3 core fun elements the listener installs for) is not a separate check-in. It emerges from Engine + Cliffhanger + Opening. Claude names it once shaping is complete, as part of the Lock. Operator can adjust. + +--- + +## TRIGGERED DIAGNOSTICS + +Pull these only when a specific problem surfaces during shaping. + +**Trigger: "I can't articulate the fun"** +- Do the progression beats change the KIND of thing that's possible, or just the AMOUNT? (Fire → ice → shadow = variety. Fire 1 → fire 2 → fire 3 = repetition.) +- Where does the world expand? List 5+ moments where the audience's model of what's possible changes. If you can't find 5, the concept may not support IM density. + +**Trigger: "The protagonist feels thin"** +- What is their defining virtue in ONE word? Can you trace that virtue through every injustice beat? If the virtue changes between beats, the engine is unfocused. +- What do they want FOR THEMSELVES — independent of anyone else? Remove the stakes character. Does the protagonist still have something to lose? + +**Trigger: "Self-sacrifice engine selected"** +- Where does the audience's empathy actually land — on the protector or the protected? If every beat is a choice made FOR the stakes character, the protagonist is a support character. They need a personal quest that the sacrifice costs them. + +**Trigger: "Choosing between event-based and journey-based"** +- Does the material's strongest escalation come from phases WITHIN a single event, or from moving THROUGH increasingly dangerous territory? The answer decides the shape. + +**Trigger: "Compressing source material"** +- For each kept moment: does it do a job no other moment in the promo is already doing? If two moments serve the same structural function, keep the strongest, cut the other. + +**Trigger: "New/unproven engine"** +- Has this engine been proven for this show? Check series_worlds for what's worked, what's failed, and WHY it failed. + +**Trigger: IM seeds are thin or flavor-duplicated** +- Use the Media Reference Tool (below) to fill gaps through shape transplants from proven references. + +--- + +## PRESSURE TEST (internal — flags-only output) + +With shaping complete, run these checks silently. Only failures surface. + +- **Empathy Target.** Remove any non-protagonist character the concept leans on — does the emotional engine survive? If not, the protagonist is a support character. +- **BECAUSE Viability.** Can a causal chain trace opening → cliffhanger with BECAUSE links? If the chain requires AND THEN, the concept's spine is missing. +- **Injustice & Stakes Surface.** Does the concept produce natural injustice beats with type variety? Can stakes escalate by DOMAIN across thirds, not just volume? +- **Cliffhanger Payoff.** Does the cliffhanger sell something the show delivers in the entry window? Point to the chapter/episode range. +- **Show Fidelity:** + - Fabrication: remove each load-bearing element — does the emotional core survive? If no, element must exist in source. + - Entry Window: load-bearing characters appear within first ~10-20 episodes. + - Setting: primary setting is the show's entry point or directly connected. + - Essence: protagonist situation fits Identity. Container fits Setting Essence. + +### Flag format + +Surface flags conversationally — not a report. For each flag: +1. What failed (named check, specific element) +2. What risk it carries (which performance metric it threatens) +3. What can be done at skeleton to absorb it +4. Which shaping check-in to revisit if the flag is unacceptable + +Use 🔻 **BOTTOM-FUNNEL FLAG** for show-fidelity failures. + +Operator's response determines lock entry: accepted flags carry forward; redirects loop back to shaping. + +--- + +## EXIT GATE (show fidelity check) + +Run once, after governing elements are locked. Not during ideation — after. Every check is binary — pass or fail. No "close enough." No "we'll fix it at skeleton." + +- **Fabrication litmus:** If I remove the fabricated element, does the promo still have an emotional core? If no — it IS the promise and must exist in the source. **Pass / Fail.** +- **Entry window:** Will the listener find the hook character within their first 10-20 episodes? **Pass / Fail.** +- **Identity match:** Does the protagonist's situation fit the Identity dimension of the Essence block? Is the virtue derivable from who the Essence says they are? **Pass / Fail.** +- **Combat match:** Does the concept's implied combat match Combat Behavior in the Essence block? If the concept needs the protagonist to fight in a way the source doesn't support — it fails here, not at skeleton. **Pass / Fail.** +- **Power match:** Does the concept's power usage match Power Source in the Essence block? **Pass / Fail.** +- **Setting match:** Does the container trace to Setting Essence? If the concept needs a setting the show's entry window doesn't contain — it fails here. **Pass / Fail.** +- **Right-show contract (Gate 5 re-run):** Re-run both Gate 5 checks against the locked concept's climax, cliffhanger, and premise frame. **Check 1 — HARD BLOCK alignment:** any break against the show's enumerated HARD BLOCKS. **Check 2 — Tonal alignment:** the operator-confirmed *"promo promises [X]"* sentence vs. the Tone Constraint verbatim (e.g. torture/death-collar/manhunt stakes on a warm-comedy underdog). Either failure fires the BOFU HARD STOP alarm and blocks lock — cleared only by the contested override, never silently, never "fix at bucketing." **Pass / Fail.** + +Any failure = hard flag. Operator must acknowledge before skeleton work begins. This is the cheapest place to kill a bottom-funnel failure — every phase after this costs more to fix. + +--- + +## LOCK + +Seven essentials formalized. Operator confirms before advancing to W2. + +1. **Functional Skeleton** — the named, validated skeleton this concept inherits (library / BSV / adaptation), or an explicit "Fresh Idea — no skeleton, CPI risk accepted." W2 builds beats 1:1 against this skeleton's order and functions. +2. **Protagonist Situation** — one sentence: who they are, what's wrong, why a cold audience cares in 10 seconds. +3. **Dramatic Container** — the structure the promo lives inside. Named event or journey. +4. **Cliffhanger Endpoint** — the exact moment the promo cuts to CTA. Dominant emotion HUNGER. +5. **Hook Engine** — from the library, or proposed new one with definition. +6. **WHY NOW** — one sentence: what makes this story happen today? +7. **Show Promise** — the 2-3 core fun elements this concept threads. One of these, stated as a universal human experience, is the Relatable Thruline that cleared Gate 3. + +**Gate confirmation:** Note that all five CONCEPT SCREEN gates passed (including Gate 5 — right-show contract, with the operator-confirmed tonal one-liner) and record any accepted show-fidelity flag or logged contested override carried forward. + +**Also noted (not locked — tested at skeleton):** working hypothesis for antagonist, stakes character, virtue, throughline, stakes ladder domains, injustice rotation. 3+ IM seeds. Any accepted flags from the pressure test. + +**Why only these seven lock:** virtue wording, throughline wording, stakes ladder domains, injustice rotation, and stakes character specifics are structural claims only fully testable once beats exist. Locking them at ideation creates commitments skeleton inherits even when the material wants to go somewhere else. The functional skeleton locks because it is the proven structure W2 inherits 1:1 — it is the one structural commitment that *should* be fixed before beats exist. + +### IM Seeds + +3+ candidates, one sentence each. Quick read: Sticky / Fun / Distinct. Name the type (Power-Ceiling Reveal, System/Artifact Discovery, Institutional Depth, Status Inversion, World Border). Flavors should not duplicate. + +If seeds are thin or flavor-duplicated, invoke the Media Reference Tool. Full IM qualification runs at skeleton — don't over-test here. + +### Conversation Name + +On lock: + +> **Concept locked.** Conversation name: **[Series] · Ideation · [Angle Name] · v1** +> (BSV: **[Series] · Ideation · [Angle Name] BSV · v1**) +> (Adaptation: **[Target Series] · Ideation · [Angle Name] Adaptation from [Source Series] · v1**) + +--- + +## MEDIA REFERENCE TOOL + +Available when IM seeds are thin, flavor-duplicated, or missing a type. Not mandatory. + +**Step 1 — Identify the type gap.** + +| Type | What's Missing | +|------|---------------| +| Power-Ceiling Reveal | No moment where scale extends upward | +| System/Artifact Discovery | No moment where architecture beneath surface is discovered | +| Institutional Depth | No moment where institution's rules are felt through collision | +| Status Inversion | No moment where the weak protagonist does something impossible | +| World Border | No moment where the world extends beyond what's on screen | + +**Step 2 — Find the reference.** Ask: "What's the best version of [missing type] you've seen in anime, film, or TV?" If none, suggest from the proven library: + +- *Institutional Depth:* Sorting Hat deliberates on Harry; Chunin Exams written test; MIB table-drag. +- *Status Inversion:* Killua assassination mode; Rock Lee drops weights; Mob at 100%. +- *System/Artifact Discovery:* DBZ scouter breaking; Divergent aptitude test. +- *Power-Ceiling Reveal:* Levi's first ODM sequence; Domain Expansion; All Might entrance. +- *World Border:* Greed Island materialization; One Piece Grand Line reveal. + +**Step 3 — Reverse-engineer the shape.** Extract the structural mechanic. The shape transfers; the content must come from the target series world file. + +**Step 4 — Transplant.** Map the shape onto real elements from the target series. + +**Step 5 — Pressure-test.** Native feel? Sticky/Fun/Distinct? If someone who knows the reference would recognize it — transplant failed. diff --git a/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow2_map.md b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow2_map.md new file mode 100644 index 0000000..65e1f8f --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow2_map.md @@ -0,0 +1,82 @@ +# WORKFLOW 2 — THE MAP · v2 (the construction brain restored + the v4 continuity layer; decides everything, writes nothing) +*(v2 delta: full merge with the proven W2 skeleton machinery after the operator's audit — the v1 "map" had kept the new layer and dropped the brain. Restored: W1 intake lock · the Spine incl. the Relatable Thruline · WHY NOW · injustice rotation/trajectory/density · the 6-question loop with the furniture test · the ANTI-SETUP GATE · Beat-1 anchor protocol · full inheritance discipline · cliffhanger construction with the withholding ratchet · the BOFU HARD STOP with contested override. Kept from v1: teaching schedule · concept caps · IN→OUT/TIME/CARRY/BECAUSE continuity chain · heat map · reveals-spent-once · words-follow-events.)* + +**Inputs, required on disk:** W1 governing elements · world doc + Essence + HARD BLOCKS · show ledger · **`functional_skeletons.md` + scene groupings (v3 export — REQUIRED)** · `three_pillars.md` · `exemplar_bank.md` (shape reference only). +**Output:** `working files/beat skeletons/[Series]_[Angle]_Map_v[X].md` — the Spine + the scene map. All construction machinery below is INTERNAL; the operator sees clean scenes and real flags only. + +--- + +## 0 · W1 INTAKE LOCK (runs before anything) + +Confirm the six governing elements: Protagonist Situation · Dramatic Container · Cliffhanger Endpoint · Hook Engine · WHY NOW · Show Promise. Mark each **LOCKED** (operator-stated) or **PROPOSED** (inferred — "implied" counts as missing). Any PROPOSED element is confirmed by the operator in one pass before building. **Thin-brief rule:** 3+ PROPOSED → say so and offer a quick W1 shaping pass. Loose concept in → loose map out. + +## 1 · SKELETON INHERITANCE (flow is inherited, not invented) + +A functional skeleton (pinned in W1, pasted, or named from the library) **owns the beat ORDER and each beat's structural FUNCTION; the Spine owns the CONTENT poured into each slot.** If one is in play, W2 never re-derives order — that freedom is exactly what invents setup-beat openings. Discipline: **1:1 by default** (no beats added, dropped, merged, or reordered silently; split/merge only with an explicit flag + operator sign-off) · **no invented connective beats** ("to set up the next one" IS the failure mode — the source's BECAUSE chain is already load-bearing; trust it) · **preserve FUNCTION, never surface** (transplant "accidental contact with the force that later inverts status," not the dragon) · **transplant-drift flag** when an inherited slot carries the source show's tonal DNA — re-tone the realization to the target register. An angle that fits no skeleton is flagged to the operator before mapping continues; free-derivation is a declared risk, never a default. + +## 2 · PRE-CONSTRUCTION — THE SPINE (~400 words of decisions, each with a "from" tag tracing to Essence) + +Load the Essence block (Three Pillars · Identity · Combat Behavior · Power Source · Voice Register · Setting Essence). Then derive: + +- **Virtue** (one word, from Identity) · **Throughline** (one binary-testable sentence, from Identity — the internal per-beat test) · **Container** (from Setting Essence — the container matches the entry-point setting; catches setting drift before beats exist) · **Combat / Power** (from their Essence dimensions). +- **RELATABLE THRULINE** (from ONE pillar): the pillar translated into a universal human experience a cold listener recognizes in ten seconds — "everyone has had something they needed to keep hidden," "everyone has been underestimated." **Strip-the-proper-nouns test:** if what remains names a show mechanic, keep abstracting until what remains is human. This is the empathy nerve every injustice unit presses on — an injustice that's unfair in plot terms but doesn't touch the thruline builds story, not empathy. +- **WHY NOW** (one sentence): what makes this happen TODAY — a clock, a deadline, an event. Every scene feels it. No natural WHY NOW in the material = flag it; building without one produces episodic structure. +- **STAKES LADDER** (escalating in DOMAIN: social → physical → existential; same domain three times is volume, not escalation) · **INJUSTICE TYPE ROTATION** (social / material / relational / moral / existential — no two consecutive units share a type) · **INJUSTICE TRAJECTORY** (severity RISES across thirds — more taken, more undeserved, more irreversible; **the worst injustice lands in the final third, never the open** — a promo can pass density and rotation and still frontload its peak in scene one, then fade; this axis exists to catch exactly that). +- **PROMISE THREADING** (the 2–3 elements the audience installs for, mapped per third; a third with zero threading is advertising a different show) · **BOFU PINS** (the HARD BLOCKS list verbatim + the tonal one-liner *"this promo promises [X]; the show is [Y]"* — [X] operator-confirmed). + +The Spine block prints at the top of every map delivery, "from" tags included. + +## 3 · THE SCENE MAP (the v4 continuity layer — unchanged from v1) + +Scenes in order; per scene: **POSITION** (cold open / mid / anchor / cliff) · **IN → OUT** (entry and exit state, one sentence each; **OUT(N) = IN(N+1), diffable — scenes are a chain, never islands**) · **TIME** (relative to the last scene; jumps declared and bridged by a voice or carried object) · **CARRY** (objects, wounds, debts, promises persisting across the seam — each touched in the next scene's opening) · **BECAUSE** (this scene happens BECAUSE of [named prior-scene event]; **every seam reads THEREFORE or BUT, never AND-THEN**) · **INJUSTICE UNITS** (ACT quotable · PUNISHER + citation · GAP one sentence) · **CONCEPT CAP** (3–4 ideas, cold opens lower) · **SEAM** (the voice that carries the listener out) · **BUDGET** (derived bottom-up — §7). +**Across the map:** each unit adds a dimension (peer → authority → structural → intimate) — never the same humiliation, **and never the same victory, re-staged**; **REVEALS ARE SPENT ONCE** (a small-stage demonstration that pre-spoils a big-stage payoff is a map defect); **the hero answers in every unit** — the ONE marked silence (if any) is a silence that IS an act, declared here. + +## 4 · BEAT CONSTRUCTION LAW (how the units inside every scene get built — internal) + +**THE LOOP — six questions on every beat:** (1) What happens? — one sentence: character, action, outcome. (2) **Who is driving it?** — a named character, never "the situation"; on injustice beats the antagonist, on positive beats the ally or protagonist. (3) **Why? — BECAUSE [previous beat].** If you can only write AND-THEN, the link is broken. (4) What is different now? — new fact, position, or constraint; nothing moved = dead weight. (5) **What choice is the protagonist making? — THE FURNITURE TEST: remove the protagonist; if the beat still happens, they're furniture. This is where a passive hero dies at the map, before any writer exists.** (6) What is the cost? — injustice beats: what's lost; positive beats: what new vulnerability opens; no cost = leaked pressure. Two consecutive beats failing the loop → stop building forward; the problem is the Spine. + +**THE ANTI-SETUP GATE (every beat — hard flag):** every beat is a **witnessed event with a named driver acting on the protagonist in real time** — never a status, a mood, or world-texture. A "protagonist at zero" beat is dramatized as an injustice event with the virtue visible, never narrated as standing. No two consecutive setup beats anywhere; none in the opening run. A backstory-delivery scene with no witnessed event is a setup SCENE — the same failure at scene grain — and does not survive the gate. + +**THE COLD OPEN (Beat 1 protocol):** anchor on one of three forms — a concrete failing attempt · a specific rupture landing on the POV · a contradiction the character is living inside. No narrator thesis, no environmental establishing. Identity + genre fuse within a sentence. Embed the structural lock (why the obvious solution doesn't work — a paradox, not just a problem). Verify agency (furniture test). **Strike test:** cover the first sentence; if the rest still works, cut it — repeat until sentence one is load-bearing. + +**And while building:** the **Gap Test** (the previous beat's ending PUSHES into this one; inventing time/location/context between beats = a gap — distinct from BECAUSE, a beat can pass one and fail the other) · **virtue visible BEFORE the punishment lands** (the audience holds what the antagonist doesn't; the strongest injustice is inverse — technically right, structurally wrong) · **positive beats carry their cost in the same beat** and leave the audience MORE anxious, never less · **antagonist echoes planned** 2–3 beats past any antagonist exit · **the over-delivery check at the climax:** the currency stays *injustice-endured / knowledge*, never *power-displayed* — the secret threatens, it does not detonate. + +## 4b · SET-PIECE REALIZATION (every committed move gets its most striking body — HERE, not downstream) + +The map's events are not summaries — each committed move is realized as **the single most striking filmable event that enacts it**. "His name appears on the board" is underbuilt; "the board glitches, scrambles, and re-selects him at one hundred percent confidence" is the realized move — the system's insistence IS the institutional depth. **The two kinds of invention, kept apart: DEPTH is required** — inventing the *staging* of a move the structure already committed (the glitch, the frame-skip, the hairline floor-crack), every mechanic and quantity in it traceable to a world-doc line. **SCOPE is banned** — new agents, subplots, mechanics, lore claims, or quantities the structure never committed fire **CANON-FABRICATED**: re-ground, tag INVENTION for operator sign-off, or fall back to the committed move. Test per set-piece: does it enact a committed move with a bible-true body (keep), or introduce a move/rule/number the map never had (cut)? + +**Engine requirements + distribution (from the taxonomy — checked at the gate):** the engine's required beats are present (Secret Identity → a near-exposure beat; Underdog Awakening → power-activation delayed past ~40%; Self-Sacrifice → a bond demonstrated in the first 30% + an internal refusal) · no 30%-of-runtime window without a TURN (a stretch where the audience's model never shifts is a flat stretch) · setup-tagged material stays under a quarter of the map · the first beat of every scene is charged, never state-setting. + +## 5 · THE TEACHING SCHEDULE + +Every world concept → the ONE scene that teaches it, through action or a staked mouth, before first use — never a lecture or roll call. A concept no scene can afford under its cap forces a cut or restructure HERE. A canon XFER requiring an untaught system is scheduled where the system is taught, or moved. + +## 6 · HEAT + DENSITY ARCHITECTURE + +Beats tagged **PHYSICAL/INTIMATE** or **PROCEDURAL**: no conversation-sized span all-procedural; the genre engine fires physically in every third. **Injustice density: no third below 50% injustice; never three consecutive beats without injustice or a world-expanding moment.** Tonal variety: at least two registers — not all dread. The world should read with EXCITEMENT, not respect. + +## 7 · PLANTS, CLIFF, LENGTH + +- **Plants — run BOTH directions:** forward (each early scene names what it can plant) and **backward from the cliff** — list what the climax and cliff pay off, then verify every payoff has a seed planted earlier; a payoff with no plant gets one planted (the arena floor shatters → a hairline crack at the humiliation peak). Plants sit near their payoffs; every withheld truth carries a **re-arm schedule** (≥2 touches where the world gets the hero wrong). +- **THE CLIFF — built in three passes:** (1) draft the natural endpoint; (2) **the MAXIMUM WITHHOLDING REWRITE** — the version that withholds most, opens the most questions, and puts the protagonist AT the threshold, hand on the door, present progressive, with something arriving — subject to the one-way ratchet (the threshold only ever moves toward MORE withholding); **one singular DATED must-resolve loop foregrounded** (a clock with a number), closing on forward questions asked as questions, then the CTA (required); (3) **the fidelity pass** — maximum withholding *pushes toward* detonating the secret into a visible win; check the rewrite against the pinned HARD BLOCKS and the tonal one-liner. Exhale test · expansion test · threshold test · verb-tense test all pass or the map doesn't lock. +- **LENGTH — WORDS FOLLOW EVENTS, NEVER THE REVERSE:** the floor (3,500 hard, ~4,500 target) is satisfied by **counting staged events** at natural density (a turn ≈ 15–25 spoken words; a narration beat ≈ 1–2 sentences). Short of the floor = add distinct material, shrink the promo, or route to W1 — never close the gap with budget; a top-down word target over thin events produces narration fill and repeated beats (the documented death of the first v4 run; house precedent: the tight Midnight shipped over the padded one). A word count is an output of the event list, never an instruction to a writer. + +--- + +## EXIT GATE (once, full map — verify by quoting; a check you can't quote hasn't passed) + +1. **Chains:** the IN→OUT chain diffs clean (OUT(N)=IN(N+1), every seam) · **the BECAUSE chain read cold, end to end — each link connects to the PRIMARY action of the previous beat; THEREFORE/BUT at every seam, never AND-THEN** · TIME jumps declared and bridged · every CARRY item lands. +2. **Anti-setup (hard flag — blocks lock):** every beat a witnessed event with a named driver; no consecutive setup beats; no setup scenes; "at zero" dramatized, never narrated. +3. **Thruline:** stated as a universal experience (strip-the-nouns test passes), anchored to a pillar; the opening lands on the nerve in the first ten seconds; the injustice units press on it, not just on plot. +4. **Agency:** every beat passes the furniture test; the hero answers in every unit (or the one declared act-silence). +5. **Injustice architecture:** density floors met (§6) · no two adjacent units share a type · **trajectory rises — the worst injustice sits in the final third; if the open tops everything after it, flag with options to raise the back half** (soft flag). +6. **Structure:** every PUNISHER's citable ACT quoted · every concept has one teaching home before first use · reveals spent once · no repeated victory mechanic · inheritance checks (order/count/function preserved; splits logged) if in inheritance mode. +7. **Withholding:** exhale · expansion · threshold · verb-tense — all four (hard). +8. **Length:** event count carries the floor at natural density; budgets are outputs. +9. **WRONG-SHOW CONTRACT (hard flag — blocks lock):** final third, cliff, and premise frame against the pinned HARD BLOCKS and the operator-confirmed tonal one-liner; **currency at the cut is injustice/knowledge, never power-displayed.** A failure fires the **BOFU HARD STOP**: surfaced loudly, never buried; cleared only by the **contested override** — the operator must contest the block's *applicability* in writing ("the world file is stale, canon allows this" with a pointer, or a logged CPI experiment); "it's cooler" does not hold; a NO-GO can stand; accepted overrides are logged. + +## OUTPUT + ITERATION + +The operator sees: the pitch (1–2 sentences) · the SPINE block · clean scenes (fields + max-3-sentence beat claims, `[→ N micro-beats]` density tags) · real flags only. The BECAUSE chain, loop results, gate internals stay internal, surfaced on request. Deliver v0 → operator pressure-tests (Spine, causal links, specificity, escalation, cliff) → deltas for ≤2-scene changes, full redelivery otherwise. **If notes go stylistic (prose, texture, how moments feel): "that territory belongs to the briefs and the writer — lock the structure and move to W3?"** Repeat to lock; typical 3–5 rounds. On lock, run the exit gate once more — construction should mean it passes by design. + +> **Map locked.** `[Series] · Map · [Angle] · v[X]` — W3 inherits 1:1; no structural changes after lock. diff --git a/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow3_briefs.md b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow3_briefs.md new file mode 100644 index 0000000..7401d30 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow3_briefs.md @@ -0,0 +1,28 @@ +# WORKFLOW 3 — THE BRIEFS · v2 (the arming layer; arms every scene, writes no prose — and stages scenes people TALK through) + +**Input, required on disk:** the LOCKED W2 map · the show's world doc + Essence + HARD BLOCKS · the show ledger (XFER source) · `dependencies/brief_template.md` (the governing law of this workflow — load whole) · `dependencies/exemplar_bank.md` · `dependencies/powerstart.md` (Scene 1 only). + +**Output:** `working files/beat sheets/[Series]_[Angle]_Briefs_v[X].md` — one brief per scene, each self-contained, released to the writer ONE AT A TIME per the W4 session protocol. Each brief is exactly the template's seven blocks: WORLD · LISTENER-KNOWS LEDGER · LORE, PRE-STATED · INJUSTICE SPEC · EVENTS, TELEGRAPHED · VOICES · BUDGET/POV/FORMAT. + +--- + +## THE DERIVATION (mechanical; the template's eight laws govern every sentence) + +1. **From the map, per scene:** the injustice units land in the INJUSTICE SPEC verbatim from W2; the concept cap becomes the WORLD block's boundary; the seam becomes the closing event. **The budget is re-derived bottom-up from the brief's own event list, exchanges first** (each mapped exchange: floor turns × ~15–25 spoken words; narration is mortar between events, **never a counted unit** — template law 7) — if the derived number falls materially under the map's allocation, the scene is under-staged: route to W2 for material, never inflate the budget and never fill the gap with narration. +2. **COLD-LISTENER TRANSLATION.** Every WORLD/LORE sentence in a stranger's vocabulary — no source-artifact or institutional jargon transmits untranslated. Test: would a person say it to a friend? +3. **THE LEDGER, ASSIGNED.** Each listener-knows item is one concrete reusable sentence, assigned to the moment it fires (or tagged background-only). One fact, one home — a fact appears in exactly one block. Cold opens: the ledger is empty; say so. +4. **LORE, PRE-STATED.** Every backstory fact as a plain sentence with its in-world source named. Hero-facts stated as truth ("He never touched her"), never as ambiguity. **Every number supplied — or the fact restated so no number is needed** (a purse counted in months of medicine, not coins). Mechanisms literal: if canon supplies no "how," restage the event to canon shapes — never transmit a mystery for the writer to hedge. +5. **EVENTS, TELEGRAPHED.** Bare clauses in order — subject-verb-object, no prose color, nothing transcribable. Exchanges carry numbered turn floors (speaker + speech-act + content-clause; extend while escalating, never shrink; **every map closes on the hero** — an unanswered villain turn stages a passive hero). Objects that act enter through the hero's perception first. Dangers are never pre-announced. +6. **XFER ROWS.** Verbatim from ledger/canon, each with: the SPEECH-ACT it answers (a required preceding turn is staged) · its ADDRESSEE (a third-person line is performed to the crowd — stage the turn) · provenance. Word-for-word or not at all; collisions (pronoun, speaker, year) surface as **OPEN items with a proposed -adapted resolution** — never silently transmitted, never silently fixed. +7. **CANON CHECK, every row.** Ages, years, ranks, abilities, pronouns verified against the world doc; HARD BLOCKS cross-checked. Findings surface as OPEN items for the operator. +8. **SLOT EXEMPLARS.** When a scene contains a position the exemplar bank covers (cold-open weave · reveal · action beat · official speech · mercy-trap offer), attach that slot's operator-authored passage to the brief as register model for that beat — model, never content. +9. **SCENE 1 ONLY — THE POWERSTART.** Load `powerstart.md`; author 3–5 line-one candidates — **injustice-coded: literal, grounded, victim-coded on first hearing** (a metaphor-parsed or self-incriminating opener is dead at the brief). Optional cold panel (3 zero-context parses per candidate: what literally happened / who do you feel for). Lock one; all candidates ship for operator swap. This is the ONE place W3 writes lines, and they ride as supplied-verbatim material. + +## THE W3 SELF-GATE (run before delivery; a brief that fails never reaches a writer) + +- **The ban list:** any authored dialogue outside XFERs/powerstart · any authored narration · any rendered prose carried from the map or source docs · any craft advice or rule cross-reference · any thematic phrasing that would read as mush if transcribed ("saving her and feeding are the same act" ✗ → "to take the blood he has to put his mouth to the wound" ✓) · any jargon · any unassigned ledger item · any duplicated fact · any missing number · any turn map ending on the villain · **any budget derivation counting "narration beats" as a unit (law 7)** · **any turn floor built only of XFERs — the floor must stage writer-voiced turns around the rungs (law 8)**. +- **Prerequisites travel:** a mid/anchor brief lists what earlier scenes established, as plain facts, sufficient for the scene to stand. +- **Powerstart fact-check:** line one's every fact is checked against Scene 1's staged events — a powerstart that the first scene contradicts ("sent a servant" over a scene that stages the new wife) is dead at the brief. +- **OPEN items** (canon collisions, restages, -adapted rows) listed at the top of the brief file for operator rulings BEFORE the writer session starts. **Standing OPEN class: canon banter lines whose idiom breaks the world's register ("action hero" in a fantasy march) — surface with a proposed period-neutral -adapted rendering; the operator rules verbatim-vs-adapted per line.** + +> **Briefs locked.** Deliver the file; W4's session protocol releases one brief at a time. diff --git a/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow4_render.md b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow4_render.md new file mode 100644 index 0000000..48cde00 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow4_render.md @@ -0,0 +1,56 @@ +# WORKFLOW 4 — THE RENDER · v1 (three stations: one writes, one repairs, one restates; the operator judges) + +**Entry gate:** the LOCKED briefs file on disk with all OPEN items ruled · `dependencies/writer_constitution.md` current · `dependencies/lineedit_codex.md` **control-calibrated** (near-zero edits on Ebony + Draft Selection — an editor that "fixes" a control is miscalibrated; tune before any live use). + +**Output:** `working files/w4 scripts/[Series]_[Angle]_v[X].md` + the per-scene log. **No promo ships without the operator's read — the read is the only taste gate.** + +**THE DELIVERY RULE (hard — installed after two consecutive runs skipped the stations).** The unit of delivery is **ONE SCENE + its receipt + its edit log.** A stitched multi-scene draft that did not pass through per-scene operator gates, the line editor, and the cold reader is a **VOIDED RUN** — not a draft to give notes on; it is discarded and the run restarts at the last gated scene. A scene delivered without its edit log is undelivered (the log is how a skipped editor becomes visible). **Every artifact carries a version stamp in its header: `built on promo_tool_v4.N`** — a run that can't name its package version can't claim its rules ran. + +--- + +## STATION 1 — THE WRITER (the session protocol) + +**One writing session renders the whole promo, one scene at a time.** The session is a CLEAN ROOM: a fresh conversation with **no folder access, no pipeline files, no prior versions** — contamination voids the artifact. + +- **The loadout, total:** the session preamble + `writer_constitution.md` (pasted whole, voice model included) + the CURRENT scene's brief. Nothing else. Prior scenes of this promo accumulate naturally in the session — that is the continuity mechanism; nothing crosses in from outside. +- **The preamble (fixed):** you are writing a full promo one scene at a time; write ONLY the current brief's scene, whole, in one go; read it aloud once at talking speed against the voice model; then STOP and wait. Keep perfect continuity with what you've already written. Never resolve the story. +- **Between scenes:** the operator's gate (below) runs; then the next brief pastes into the SAME session. Operator notes paste in as a numbered packet before the next brief — operator-authored replacement lines are used VERBATIM. Point-fixes end with "reprint the corrected scene in full." +- The writer call runs at maximum capability; every other station runs cheap. + +## STATION 2 — THE LINE EDITOR (the mechanized notes) + +A separate, fresh-context agent receives ONLY the draft scene + `lineedit_codex.md`, and does one thing: walk the codex classes against the draft, fix violations in place, and log every edit as `[class] before → after`. + +- It never rewrites voice, never restructures, never judges quality. Where a codex class quotes an operator model, it matches register, never content. +- A sentence that seems wrong but fits no class is FLAGGED, not touched — flags route to the operator; a ruled flag becomes the codex's next class. +- Output: the edited scene + the edit log. Target state: zero edits (the writer has internalized the codex); calibration state: zero edits on the two controls, always. + +## STATION 3 — THE COLD READER + +A zero-context agent reads the edited scene once (plus, mid-promo, a two-line "previously" assembled from the briefs' prerequisite facts) and restates it: who acted, what changed, what each named thing is. Misparses and untaught references flag with the quoted line. Comprehension only — it never grades feeling; a "felt nothing" is information for the operator, never a verdict. + +## THE PER-SCENE RECEIPT (arithmetic only — prints with every scene) + +**Two disciplines govern it. ONE ALTITUDE, ONE PASS:** every check has exactly one home and runs exactly once; later stages read the recorded result, never re-run it. **REPORT EXCEPTIONS, NOT CONFIRMATIONS:** a clean check emits one line — the receipt never documents its own innocence; that is the named source of receipt bloat. + +`CONTINUITY: the scene's opening matches the map's IN (time, place, CARRY items touched) and its close lands the OUT + seam voice — checked against the prior scene's actual last lines · length vs budget — WITH the density rule: a scene >20% over its event-derived budget is presumed padded (route: cut description, never events); a scene short is a BRIEF defect routed upstream, never filled · EXCHANGE RECONCILIATION (each mapped exchange: floor turns → rendered turns → closes on the hero? — map by map) · dialogue share + narration-block census (blocks >2 sentences, listed) — printed diagnostics, never gates · XFERs verbatim (string-checked) + triggers honored · numbers sourced (every figure names its brief/world-doc source; unsourced = cut) · plants/re-arms due this scene, quoted · edit log (count by class) · restatement result · [after operator read] notes count + bin split (repeat / new / taste)` + +## THE OPERATOR GATE (between every scene) + +The operator reads the edited, checked scene with its receipt. Notes triage into the three bins (CLAUDE.md governance): **REPEAT CLASS** → strengthen that codex class's exemplars — an editor miss, fix the instrument · **NEW CLASS** → one line into constitution or codex + the operator's pair; conserve mass (name what it merges into) · **PURE TASTE** → apply to the scene, deposit the operator's lines to `exemplar_bank.md` by slot, add NO law. Then the fixes packet (Station 1 protocol) or, if clean, the next brief. + +**Health metrics, logged per scene:** notes count · repeat-class share. Converging = down and toward zero. A rising repeat share indicts the editor; a rising new-class rate on a mature register indicts the constitution — both are instrument problems, never grounds for a pipeline restructure without a conservation table. + +## ROUTING (pre-decided) + +Mechanical miss (length, XFER breach, plant unpaid) → fix in place, same session. Comprehension fail → plainer line, same session. **Structural symptom** (a beat that can't run hot, a concept that won't teach, a passive-hero unit) → a MAP defect: route to W2 with a diff; W4 never relitigates structure. Register drift across a whole scene → re-paste the constitution into the session and regenerate the scene once; a second drift in the same session = end the session, start fresh from the last approved scene. + +## LOCK + DEPOSIT + +All scenes approved → assemble the full script, run the receipt on the whole (length floor 3,500 hard · every XFER · every plant · the cliff resolves nothing), save, and deposit the operator's authored lines from this run into `exemplar_bank.md` and any keep-lines to the ledger as CANDIDATE (quarantined — unshipped material anchors nothing, per the Harvest Provenance Law). + +> **Script locked, pending the operator's independent read of the assembled whole.** A passed gate is a measurement, never a verdict. + +## FINISH (automated runs) + +When the script and receipt are saved, run `promo-finish finish` per `scripts/PROMO_FINISH.md` — one command, key=path for map, briefs, script, receipt. Stop on `PROMO_FINISH_OK`. diff --git a/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow5_analysis.md b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow5_analysis.md new file mode 100644 index 0000000..1d0e306 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/workflows/workflow5_analysis.md @@ -0,0 +1,508 @@ +# WORKFLOW 5: ANALYSIS + +**Purpose:** Judge finished and in-progress work — skeletons, beat sheets, and scripts — against the two keys that decide whether a promo is worth shipping. Diagnosis only; no rewriting unless the operator asks to shift back into W2/W3/W4. + +W5 is **not** a beat-polishing pass with an eye toward W4. Its first job is the verdict: will this work for us? W4-improvement suggestions are a *secondary* output, made only after the two keys have been answered — never a substitute for the verdict. + +--- + +## THE TWO KEYS (the core objective — applied to EVERY artifact) + +Every W5 analysis — of a skeleton, a set of beats, or a finished script — answers the same two questions, in order. They apply identically across all three sub-functions. If an analysis hasn't answered both, it isn't finished. + +### KEY 1 — CPI: will this obligate an install? + +Is this a strong enough piece of work that a cold viewer paying for the impression is *obligated* to install? This is the funnel-top question: opening, cliffhanger, writing, scene craft, dialogue. For a **script**, Key 1 is scored by the Quality Gate in `bucketing.md` (bucket ≥ 3 = PASS). For a **beat sheet or skeleton**, Key 1 is the same judgment applied to structure: does this beat-order, executed competently, obligate an install — or is the opening soft, the cliffhanger leaky, the spine inert? + +### KEY 2 — BOFU: will this convert and hold a paying user? + +Will a cold install become a paying user who finds the show they were promised? Key 2 is a **scorecard of four checks, ranked by importance.** Check #1 is a hard gate; #2–#4 are weighted and a severe failure on any can sink BOFU. + +1. **True to the show (MOST IMPORTANT — hard gate).** Is it recognizably this show — world, cast, mechanics, Essence, AND tone? A tone or premise the show doesn't support (e.g. a torture/death-collar stakes premise on a show that isn't that dark) FAILS here even with flawless craft. For scripts this is the Show Fidelity Gate in `bucketing.md`. **A Key 2 #1 failure fails the artifact** — name it and give the reasons. +2. **Extreme empathy, especially right before the cliffhanger (second most important).** Has the audience earned the right to care by the climax, and is empathy *peaking* in the run-up to the cut? Injustice density is the engine of this. Empathy that depletes after the first third, or runs cold into the cliffhanger, is a BOFU failure. +3. **A unifying theme / thruline that aligns with the show.** Is there one relatable thruline — "everyone has been underestimated," "everyone has had something to hide" — and does it match the show the listener actually gets at BOFU? A thruline that promises a different emotional contract than the show delivers is a BOFU failure. +4. **A discrete, must-resolve cliffhanger — not a vague world-expansion.** Are we selling a specific conclusion a listener will be *desperate* not to miss (the killer is revealed, a one-on-one match is called) — or something diffuse and "bigger" that merely expands the world? Discrete, must-resolve hooks convert harder at BOFU. A world-expansion-only cliffhanger is a flag. + +### Verdict + +An artifact is worth advancing only if **Key 1 PASSES and Key 2 PASSES** (with #1 being a hard gate). Either key failing = a FAIL with explicit, actionable reasons. State the verdict first; the diagnostic detail and any W4-improvement notes follow it. + +--- + +W5 also feeds the **W4↔W5 automation loop.** Every analysis produces dual-channel output: operator-facing markdown AND a structured findings block W4 can parse for revision. This is a downstream convenience, not the objective — the two keys come first. + +--- + +## INPUTS — TIERED LOAD MODEL + +W5 prioritizes speed-to-diagnosis. Do not bulk-load all reference files at start. + +### Load at start (minimal) + +- **The artifact being analyzed** — beat sheet or script (already in conversation). +- **`microbeat_taxonomy.md`** — kill flags + anti-pattern flags + tag/subtype reference. Used in every sub-function. +- **`voice_style.md`** — §6 LLM failure modes + §7 diagnostic tests. Used in every sub-function. + +### Load on demand + +- **`bucketing.md`** — only when running Bucketing (Sub-function 2). Standalone two-gate framework (Quality Gate + Show Fidelity Gate); do not preload. +- **`world_[show].md`** — Essence block only, pulled when fidelity checks fire or when running the Show Fidelity Gate (Key 2 #1). +- **`three_pillars.md`** — pulled when assessing Key 2 #3 (thruline alignment with the show). +- **`hook_engine_library.md`** — only when verifying engine contract during Deep Dive. +- **`functional_skeletons.md`** — only when verifying skeleton inheritance during Deep Dive. + +### Do not load + +- W1/W2/W3/W4 spec files (W5 operates on outputs, not specs). +- Example files. +- Any reference file not listed above. + +--- + +## ROUTING + +| Input | Default sub-function | Deep Dive trigger | +|---|---|---| +| Beat sheet / skeleton | **Beat Analysis** (Sub-function 1) | On request — "go deep" or "full audit" | +| Script | **Bucketing** (Sub-function 2) | After both gates pass (Bucket ≥ 4 AND Fidelity PASS) OR on request | + +If the operator says "analyze," "what's wrong," "notes" → default to the routing above. If they say "deep dive" or "full audit" → run Sub-function 3 directly. If they say "bucket this" → Sub-function 2. + +--- + +## POSTURE + +This is the only workflow where full diagnostic density is correct. You are evaluating work, not building. + +**The two keys override all other lenses.** Every diagnostic below is in service of answering them: + +1. **Key 1 — CPI.** Will this obligate an install? (Funnel-top craft + structure.) +2. **Key 2 — BOFU.** Will it convert and hold a paying user? Its four ranked checks — true-to-show (incl. tone), empathy peaking before the cliffhanger, an aligned thruline, and a discrete must-resolve cliffhanger — are the through-line of every sub-function. Injustice density is not a separate lens; it is the *engine* of Key 2 check #2, and depleting injustice is flagged as a BOFU failure. + +**Be critical.** You are seeing this for the first time. You did not build it. Find the weaknesses. State the verdict before the polish. + +**Cold read, every time.** Treat every analysis — beats or script, first pass or fifth — as an independent first read. Never diff against a prior pass or check only whether the last note was addressed. Re-derive the verdict from scratch. The writer's incentive is to revise until the tool agrees; the defense is that approval is never inherited. A piece that would fail on a clean read in a new conversation must fail here, regardless of how many revisions preceded it. If a fresh read lands lower than last time, say so and explain why. (Full statement in Sub-function 1 → Cold-Read Mandate; it applies equally to re-bucketing in Sub-function 2.) + +**Token discipline.** Default outputs are compressed. Deep dive only on request or when the script passes both gates. + +--- + +## OUTPUT MODEL — DUAL CHANNEL + +Every W5 analysis produces two outputs: + +### Channel 1 — Operator-Facing Markdown + +Compact diagnostic for human review. Format varies by sub-function (see below). Default posture: tight, actionable, no filler. + +### Channel 2 — Structured Findings Block + +Machine-readable table W4 can parse for the automation loop. Same data as the markdown, normalized into rows. Always appended at the end of the analysis output. + +Every analysis doc ends by updating the show/angle findings ledger (append its findings, mark any it retires) — so the ledger W3 loads is a maintained artifact, not a scavenger hunt. + +**Format:** + +``` +## STRUCTURED FINDINGS + +| ID | Severity | Location | Category | Issue | Proposed Fix | +|---|---|---|---|---|---| +| F-001 | CRITICAL | Beat 7 | taxonomy:kill:STATIC-BEAT | Beat has no nameable movement; state description only | Rewrite with internal change OR merge into Beat 8 | +| F-002 | HIGH | Scene 2 MB5 | craft:dialogue-thinness | Dialogue volume 45%, target 60%+ for Single-Cast | Generate crowd reactions + antagonist escalation per W4 §Dialogue Generation | +| F-003 | MED | Beat 12 | structural:im-desert | 3 consecutive beats without IM | Layer T1 IM at Beat 11 | +``` + +**Severity tiers:** + +| Tier | Meaning | W4 loop behavior | +|---|---|---| +| **CRITICAL** | Kill flag, HARD BLOCK, Bucket 1-2 trigger, structural break that prevents shipping | W4 must revise; cannot auto-advance. Surfaces immediately. | +| **HIGH** | Significant execution or structural failure requiring revision before lock | W4 auto-revises once; if still failing, surfaces to operator | +| **MED** | Improvement opportunity, polish-level for Bucket 4-5, structural pattern worth fixing | W4 surfaces to operator with proposed fix; operator decides | +| **LOW** | Observation; no action required unless operator chooses | Appended to polish notes; not surfaced | + +**Categories** (controlled vocabulary — extend only when a new category is required): + +- `taxonomy:kill:[FLAG_NAME]` — kill flag from `microbeat_taxonomy.md` Section 8 +- `taxonomy:anti-pattern:[FLAG_NAME]` — anti-pattern from Section 9 +- `craft:[principle]` — failure against `voice_style.md` §1 craft principle (specificity / cruelty / compression / witness / gesture / system / cliff / dialogue-thinness / staging-violation) +- `llm-failure:[mode]` — `voice_style.md` §6 LLM failure mode (abstract-lore / trauma-summary / flash-forward / adjective-stacking / cartoon-bully / resolution-leak / explain-after-show / repeated-humiliation / confusion-twist / drop-in-savior / texture-over-clarity / genre-muddy) +- `structural:[issue]` — structural pattern (im-desert / im-density / injustice-distribution / because-chain / cliffhanger / hook-engine / escalation / parallel-threads) +- `quality:[dimension]` — Quality Gate (Key 1) dimension failure (opening / cliffhanger / writing-style-voice / scene-quality / dialogue-ratio) +- `fidelity:[surface]` — Show Fidelity Gate (Key 2 #1) failure (surface / essence / tone-fit). A `fidelity:tone-fit` finding is always CRITICAL. +- `bofu:[check]` — Key 2 #2–#4 failure (empathy / thruline / cliffhanger-type) +- `essence:[dimension]` — show essence drift, scored inside the Fidelity Gate (identity / combat / power-source / voice-register) + +**Location format:** `Beat [N]`, `Scene [N] MB[N]`, `Scene [N]`, `Whole script`, `Powerstart`, `CTA`, or `Lines [N]–[N]` for specific passages. + +--- + +## SUB-FUNCTION 1: BEAT ANALYSIS + +**Input:** W3-locked beat sheet (scenes containing tagged micro-beats with treatments + annotations), or a skeleton. +**When to use:** Default for beat sheet / skeleton analysis requests. +**Purpose:** Answer the two keys for the structure *before* W4 writes prose — and only then catch the story problems worth fixing at the cheap iteration stage. + +### COLD-READ MANDATE (non-negotiable) + +**Every analysis is a fresh, first-time evaluation — even if you have analyzed this exact beat sheet before in this conversation.** Do not diff against a prior pass. Do not check "did the thing I flagged get fixed?" and call the rest unchanged. Re-derive the verdict from scratch, as if you have never seen these beats and have no memory of an earlier score. + +Why this is a hard rule: the writer's incentive is to revise until the tool agrees. If each pass only checks whether the last note was addressed, the score ratchets upward across iterations regardless of whether the beats actually got better — the operator games the analysis without meaning to. The defense is independence. A beat sheet that would FAIL on a clean first read in a new conversation must FAIL here, no matter how many times it has been revised or how close the last pass came to passing. + +Operationally: +- Score and label every beat from the artifact in front of you, not from the delta since last time. +- If a revision fixed Beat 7 but quietly weakened Beat 12, the cold read catches Beat 12 — a diff-read would miss it. +- Never let "this is close to what we approved before" substitute for a real re-read. Approval is not inherited. +- If a fresh read lands lower than a previous pass, say so plainly and explain why. The operator needs to know the honest standing, not a number that only goes up. + +State the basis explicitly in the output: this is a cold read scored on its own merits. + +**For high-stakes re-checks, recommend a fresh conversation.** A prior analysis sitting in the same context can still bias the re-read; the only way to guarantee a true cold read is to re-run it in a new conversation. When the operator is re-checking something that has already been analyzed here — especially after several revisions — add one line: *"For a fully independent read, re-run this in a new conversation."* + +### The two keys for a beat sheet + +Beat Analysis answers the same two keys as Bucketing, applied to structure rather than execution: + +- **Key 1 (CPI):** would this beat-order, competently executed, obligate an install? Opening pull, cliffhanger hunger, propulsive spine. The Phase A dimensions below are how Key 1 is scored for a beat sheet. +- **Key 2 (BOFU):** #1 is it true to the show (world, Essence, **tone-fit** — a beat sheet can bake in a tone the show doesn't support); #2 does empathy build and *peak before the cliffhanger* (injustice density + witness beats); #3 is there one aligned thruline; #4 is the cliffhanger discrete and must-resolve, not a vague world-expansion. Lead the operator-facing output with the two-key verdict, then the dimension detail. + +### Priority Order — STORY FIRST, WORKFLOW SECOND + +Beat Analysis is fundamentally **story analysis**. Will this beat sheet tell a story that converts? Phase A runs first and gets primary surface area in the operator-facing output. Workflow compliance (taxonomy kill flags, missing annotations, spec adherence) is real but secondary — it lives in Phase B and surfaces as polish notes after the story diagnostic. + +A beat sheet with broken story logic and perfect spec compliance is a failure. A beat sheet with strong story logic and a missing `Movement:` annotation is a polish job. The analysis must reflect that priority. + +### Phase A — STORY ANALYSIS (PRIMARY) + +The lens here is the listener, not the spec. Does this beat sheet move a cold listener from scroll to install? Each dimension scored PASS / FLAG / FAIL with one-line evidence (beat refs required). + +- **Opening pull.** Does Beat 1 make the listener CARE in 3 seconds? Does it open inside the rupture — concrete failing attempt, rupture landing on POV, or contradiction the protagonist is already inside? A clean SETUP that takes 4 beats before the rupture arrives → FLAG. +- **Protagonist agency.** Across the beat sheet, is the protagonist driving the story or being moved by it? Active choices with visible cost = PASS. Receiving information / being acted upon throughout = FAIL. +- **Antagonist effectiveness.** Is the cruelty specific (named objects/acts/words, not labels), procedural (calm common sense, not theatrical), and escalating across the arc? Multiple antagonist sources with differentiated cruelty modes = PASS. Single antagonist delivering the same kind of harm repeatedly = FLAG. +- **Empathy investment.** Has the audience earned the right to care by the climax? Are there witness/tenderness beats inside the darkness? Beat sheet that is pure injustice with zero warmth = FLAG (the listener fatigues; CTI suffers). +- **BECAUSE chain causality.** Read every scene-to-scene link cold. Does each link connect to the PRIMARY action of the previous scene, or is it just narrating sequence? Broken or weak links = CRITICAL (the spine doesn't hold). +- **Injustice density and variety.** Map every micro-beat: injustice or not. Where are the deserts? Is the variety rotating (Social / Material / Relational / Moral / Existential / Institutional / Physical)? Does each tagged INJUSTICE STRIKE pass the threshold test (knowledge gap OR virtue punished — friction ≠ injustice)? Density depleting after first third → FAIL. +- **IM map.** Every IM beat. Are they sticky (one-sentence describable), fun (exciting not just grim), distinct (different from each other)? Deserts (3+ beats without)? Tonal variety (at least 2 registers)? +- **Stakes coherence.** Are stakes felt or labeled? Specific consequences and named costs = PASS. Generic threat language ("everything is at stake") = FLAG. +- **Set-piece pacing.** Highest-stakes moments getting room to breathe? Or are High set-piece beats compressed alongside Low set-pieces in the same scene? +- **Resolution withholding.** Inhale or exhale at the final beat? Becoming, or having become? More questions at the cliffhanger than at the start of the final third? Same emotional currency as the opening? Resolution leaked → CRITICAL. +- **Cliffhanger hunger.** Does the final beat make a cold listener NEED to download? One unresolved question that compresses the engine = PASS. Multiple closed loops with one minor thread left = FAIL. + +### Phase B — WORKFLOW & COMPLIANCE (SECONDARY) + +Spec adherence check. W3 already ran kill-flag, review-flag, and anti-pattern scans at lock. W5 re-runs defensively. Findings here surface as polish notes and improvement opportunities — NOT as the primary diagnostic. + +**Severity calibration for workflow findings:** + +- A workflow violation that is **also breaking the story** (e.g., STATIC-BEAT at a load-bearing moment producing a dead spot in the listener's experience) → escalate to CRITICAL/HIGH and ALSO appears in Phase A as a story finding. +- A workflow violation that is **pure spec compliance** with no story impact (e.g., missing `Punishment type:` annotation on an INJUSTICE STRIKE beat where the cruelty modality is clear from context) → MED or LOW. Polish note for W4 readiness, not a story problem. +- **Kill flag does not automatically equal CRITICAL severity.** Severity follows story impact, not spec category. + +**Kill-flag re-scan** (from `microbeat_taxonomy.md` Section 8 + W3 spec): + +- `CLIFF: RESOLUTION` present → CRITICAL (story break — resolution leaked) +- First micro-beat of any scene tagged `SETUP: STATE` → HIGH (story risk — Q1 retention bleeds at scene break) +- Engine-specific required subtypes missing → HIGH (engine contract violation) +- More than 25% of total micro-beats tagged `SETUP: STATE` → HIGH (pacing dead, story drifts) +- Zero `INJUSTICE STRIKE` in first 25% of runtime → CRITICAL (no hook for empathy → CPI collapse) +- Zero `TURN` micro-beats in any 30% window → HIGH (escalation flatlines) +- `TURN: REVEAL` without named overturned assumption → MED (W3 quality, not story per se — fix at W3) +- `TURN` beat without WITHHELD/SATISFIED modifier → MED +- Any micro-beat under 80 words → MED (W4 will invent; not story-breaking but W4 quality risk) +- `STATIC-BEAT`: any micro-beat with no nameable movement → severity follows the story finding. If the static beat is at a load-bearing moment (Scene 1, Cliff, IM landing), CRITICAL. If it's a low-impact connective beat, MED. +- Missing required annotations per tag (cruelty modality, punishment type) → LOW unless ambiguity is breaking the W3→W4 handoff. + +**Anti-pattern scan** (from `microbeat_taxonomy.md` Section 9): VILLAIN-MONOLOGUE-OVERRUN, MECHANIC-TOLD-NOT-SHOWN, BOND-CLAIMED-NOT-DEMONSTRATED, STAKES-VAGUED, STAKES-FABRICATED, INJUSTICE-LABELED-NOT-INFLICTED, CLIFF-RESOLVES. Each scored by story impact, not spec category. + +**Other workflow checks:** +- Movement annotation completeness (any beat missing `Movement:` field). +- Tag distribution (any single tag >40% of beats → flag balance issue). +- Treatment word counts (any treatment >150 words → likely should split into two micro-beats; HIGH if it does, MED if borderline). + +### Operator-Facing Output (STORY-LED) + +``` +## BEAT ANALYSIS: [Title] +*Cold read — scored on its own merits, independent of any prior pass.* + +**VERDICT: [PASS / FAIL]** +KEY 1 — CPI: [PASS / FAIL] | KEY 2 — BOFU: [PASS / FAIL] + #1 true-to-show (incl. tone): [PASS/FAIL] · #2 empathy peaks pre-cliff: [strong/flag] · #3 thruline aligns: [strong/flag] · #4 discrete must-resolve cliff: [discrete/flag] + +**[Score] / 100 — [LABEL]** + +[2–3 sentence executive summary explaining the score in plain, critical language — what works and where it breaks. Model: "Solid, propulsive start; falls apart in the final third; samey empathy builds throughout." Lead with the two-key verdict. If a tone-fit or fidelity break fails Key 2 #1, that is the headline regardless of score.] + +### STORY DIAGNOSTIC + +[Phase A dimensions: PASS / FLAG / FAIL per dimension with one-line evidence and beat refs. Skip clean PASS dimensions to keep tight — only show FLAG and FAIL plus 1–2 PASS calls worth protecting.] + +### Beat-by-Beat +[EVERY beat gets one of four labels: + - **PROTECT** — load-bearing strength; do not touch in revision, a rewrite would likely make it worse. (Tag + one line on WHY it's protected, so the operator doesn't accidentally cut it.) + - **STRONG** — works. Tag only, no note needed. + - **WEAK** — underperforms. One-line diagnosis + a **prescriptive fix** (concrete, actionable — what to change and how, not just "make it stronger"). + - **CRITICAL** — breaks a key or the spine. One-line diagnosis + a **prescriptive fix**, and it also appears in Structured Findings at CRITICAL/HIGH. + Notes through the STORY lens — what the beat does for the listener, not spec compliance. Every WEAK and CRITICAL beat MUST carry a prescriptive suggestion; a label without a fix is incomplete.] + +### Workflow & Compliance Notes +[Phase B findings that didn't escalate to story-level. Polish notes for W3 cleanup or W4 readiness. Bullet list, one line each. Omit entirely if clean.] + +### THESIS — Vital Improvements +[2–4 sentences. The overall takeaway: the few changes that actually move this from where it is to a pass (or to a higher tier). Not a list of every note — the vital ones. If it FAILS, name the one or two breaks that must be fixed before anything else is worth doing. This is the section the operator acts on first.] + +## STRUCTURED FINDINGS + +[Table per Output Model spec. Story findings FIRST, sorted by severity. Workflow findings AFTER, sorted by severity.] +``` + +### Box Office Scale (label only) + +| Range | Label | +|-------|-------| +| 95–100 | BLOCKBUSTER | +| 85–94 | VIRAL | +| 75–84 | CROWD PLEASER | +| 65–74 | POPCORN FLICK | +| 55–64 | STRAIGHT TO STREAMING | +| 45–54 | B-MOVIE | +| <45 | BACK TO THE LAB | + +Score by **story judgment**, not formula. Story-breaking issues (CRITICAL Phase A findings) cap at 54. Workflow-only issues do not cap the score on their own — a beat sheet with strong story logic and Phase B compliance noise scores by the story it tells, with workflow gaps treated as polish. + +**The score never overrides the verdict.** The /100 is a story-quality label, not the pass/fail. A beat sheet can score well on story craft and still FAIL on Key 2 #1 — a tone or premise the show doesn't support, or Essence the beats bake in wrong. When Key 2 #1 fails, the verdict is FAIL and the score is secondary; lead with the break, not the label. + +--- + +## SUB-FUNCTION 2: BUCKETING (SCRIPT) + +**Input:** W4-locked script. +**When to use:** Default for any script analysis request. First question is "can this writer execute at the level we need?" — not "is the structure right?" + +### Procedure + +Run the full procedure in `bucketing.md`. Load that file at this point (not at W5 start — see tiered load). Bucketing is the script-level instrument for the two keys: the **Quality Gate** answers Key 1, the **Show Fidelity Gate** answers Key 2 #1, and the remaining Key 2 checks (#2 empathy, #3 thruline, #4 cliffhanger type) are surfaced alongside. + +**Brief summary of the bucketing.md flow:** + +1. Read cold. +2. Run Fast Path kill check (quality kills AND fidelity kills). +3. **Quality Gate (Key 1):** score the three primaries (Opening / Cliffhanger / Writing Style & Voice) — MIN caps the bucket; craft floors (Scene Quality / Dialogue Ratio) pull down within it. Bucket ≥ 3 = PASS. +4. **Show Fidelity Gate (Key 2 #1):** clean PASS/FAIL across surface, Essence, and tone-fit, landing-weighted. +5. Surface Key 2 #2–#4 (empathy / thruline / discrete-cliffhanger) as flags. +6. Adversarial pass (bucket ceiling 3 or 4, or borderline fidelity). +7. Write the verdict + compressed diagnostic. **Verdict = PASS only if Quality Bucket ≥ 3 AND Fidelity = PASS.** + +### Integration with the broader architecture + +When running Bucketing, also surface: + +- Any `voice_style.md` §6 LLM failure mode flag — append as a HIGH structured finding. +- Any `voice_style.md` §7 diagnostic test failure across the script — append as MED (HIGH if it compounds with a quality trigger). +- Any per-show **Essence drift** (Identity, Combat, Power Source, Voice Register) — scored inside the Show Fidelity Gate. Surface as `essence:[dimension]` in structured findings. +- Speaker tagging issues for Multi-Cast VO — untagged narrator prose → HIGH (`craft:speaker-tag-missing`). +- **A tone-fit FAIL is always CRITICAL** — it fails Key 2 #1 and therefore the script, no matter how clean the Quality Gate. + +### Operator-Facing Output + +Use the readable diagnostic layout from `bucketing.md` → OUTPUT FORMAT (markdown, never a code block — verdict first, scores at a glance, each flaw as what-it-is + why-it-hurts + next action). Append the structured findings block at the end. + +### When to offer Deep Dive + +After bucketing: +- **Both gates pass (Bucket 4–5 AND Fidelity PASS):** offer Deep Dive. The two keys are cleared; structural analysis is now the bottleneck. +- **Fidelity FAIL:** do NOT advance, even at Bucket 5. The show-truth break is fixed or the script reassigned first — a clean bucket does not buy a pass. +- **Bucket 1–3:** do NOT auto-advance. Execution needs fixing first. +- **Operator explicit request:** always honor. + +Phrasing: > "This passes both gates — ready for a structural deep dive. Want me to run it?" + +--- + +## SUB-FUNCTION 3: DEEP DIVE + +**Input:** W4-locked script (both gates passed OR operator override) OR W3-locked beat sheet on request ("go deep"). +**When to use:** Triggered after both gates pass, or on explicit operator request. Burns significant tokens; only valuable once the two keys are cleared. + +Deep Dive presumes the two keys have passed and stress-tests the **structure** that bucketing doesn't reach (IM density, BECAUSE chain, hook-engine contract, skeleton inheritance). It still re-confirms Key 2 at depth — show fidelity on every non-source element, injustice distribution as the empathy engine (#2), and resolution withholding / cliffhanger shape (#4) — because structural breaks can sink BOFU even when the gates passed. This sub-function also feeds W4's revision cycle, but the two-key verdict, not the loop, is the point. + +### Step 1 — Structural Read + +Single compact table. No prose on clean elements — only expand on problems. + +| Element | Finding | +|---|---| +| Hook engine | [which one, or none] | +| Functional skeleton | [chosen skeleton from W1; honored / drifted] | +| Container | [event / journey / neither] | +| Antagonist | [named human / absent / system] | +| Stakes character | [present / absent / inconsistent] | +| BECAUSE chain | [holds / breaks at Beat X] | +| Escalation | [rising / flat / reverses at Beat X] | +| Cliffhanger | [hunger / dread / resolved] | +| Engine contract | [honored / violated] | + +### Step 2 — IM Audit + +Two artifacts in order: qualification log, then IM table. Do not skip the log — writing the rejects is the forcing function against inflated counts. + +**Qualification Log:** + +``` +CANDIDATES: [n] flagged → [m] survive + +EXCLUDED ([n-m]): +- Beat [X]: [candidate] — [reason] +``` + +**Default-NOT-IM priors** (auto-exclude unless explicitly overridden with written rationale): + +- First 30 seconds / Beat 1–2 → default PREMISE. Delta Check fails when no prior understanding exists. +- Character relationship beats (breakup, betrayal, bond) → default THROUGHLINE. Character Swap Test mandatory. +- Combat executing established mechanic → default NOT IM. Clear only if new mechanic revealed. +- Degree escalation in same domain (Stage 4 → Stage 6) → first instance qualifies, subsequent do not. Fails Distinct. +- Narrator-explained discoveries → default UNREALIZED, not ALIVE. +- Pre-announced moments → default DEGRADED, never ALIVE. + +**IM Table:** + +``` +IM Map: [count] IMs ([T1] T1 / [T2] T2) — target: [micro-beats ÷ 2] + +| Beat | IM | Tier | Flavor | Stage | Issue? | +|------|----|------|--------|-------|--------| + +Flags: [deserts, monotony, flavor concentration, same-domain clusters] +``` + +Stage (ALIVE / DEGRADED / UNREALIZED) for scripts only. UNREALIZED does not count toward total. + +### Step 3 — Combined Scan + +Single pass. Report violations only. + +- **BECAUSE chain.** Write every scene-to-scene link. Primary action driving each? +- **Injustice distribution.** Map by type. Adjacent variation? Thirds above 50%? +- **Resolution withholding.** Exhale test, Expansion test, Threshold test (see `voice_style.md` §5 — resolution leak; CLAUDE.md → Resolution withholding). +- **Parallel threads.** Failures only. If none: "No parallel threads." +- **Show fidelity.** Fabrication litmus on every non-source element. Entry window. Essence match. +- **`voice_style.md` §7 diagnostic tests** across the full script. Per-scene scores aggregated. +- **`voice_style.md` §6 LLM failure modes** scan. +- **`microbeat_taxonomy.md` anti-patterns** — list matches with beat refs. +- **W3 staging respect (W4 scripts only).** Confirm W4 didn't override W3 physical specs or invent characters/objects/locations. + +### Step 4 — Delivery + +``` +## DEEP DIVE: [Title] + +### Top Fix +[One sentence — the single most important fix for CPI.] + +### Structural Issues +[Ordered by severity. Each:] +- **[Issue]** — Beat [N]: [What's wrong. Why it hurts CPI. Fix.] (3 sentences max.) + +### Protect List +[1–3 strengths to preserve, with beat refs.] + +### IM Map +[Table from Step 2] + +### Overall +[1–2 sentences.] + +## STRUCTURED FINDINGS + +[Full table per Output Model spec] +``` + +### Deep Dive Principles + +- **Be specific.** Beat references on every issue. +- **Propose fixes.** When flagging fabrication, name the world-file swap. +- **Prioritize.** 8 issues → lead with the 2 that matter most for CPI. +- **Don't rewrite.** Diagnose only. The rewrite happens in W3/W4 when the operator routes back. + +### Multi-Script Comparison + +Activate only when analyzing 2+ scripts in the same request. +- Lock audit A before opening B. +- No comparative framing until all audits locked. +- Same event, different staging call, no justification → reopen that IM only. + +--- + +## W4↔W5 AUTOMATION LOOP + +W5 is the analysis half of the automation loop architecture. W4 produces a draft → W5 analyzes → structured findings feed back to W4 → W4 revises → loop until quality threshold is met or escalation surfaces to operator. + +### Loop Operation + +1. **W4 finishes a draft** (scene-by-scene mode: per scene; one-shot mode: full promo). +2. **W5 runs** — Beat Analysis (if beat sheet) or Bucketing → Deep Dive (if script and Bucket 4–5). +3. **Structured findings produced.** +4. **W4 consumes findings** per severity tier: + - **CRITICAL** → W4 cannot advance. Surface to operator immediately with the finding + W5's proposed fix. + - **HIGH** → W4 attempts auto-revision ONCE. If finding persists after revision, surface to operator. + - **MED** → W4 surfaces to operator with proposed fix. Operator decides accept / revise / defer. + - **LOW** → Append to polish notes; not surfaced. +5. **Revision cycle.** W4 revises, W5 re-analyzes. Loop terminates when no CRITICAL/HIGH findings remain, OR when the operator manually advances despite remaining findings, OR when W4 has attempted revision on the same finding twice and it persists. + +**Closure-table verification (X-1, W5 side).** When the artifact is a revision responding to a prior W5 findings table, the next W5 pass opens by verifying the previous revision's closure table — every finding ID marked FIXED or DEFERRED, and FIXED confirmed as the defect being absent from the surrounding block (not merely one line changed) — before reading fresh. This precedes, and does not replace, the cold read. + +### Loop Termination Conditions + +- Clean run: zero CRITICAL, zero unresolved HIGH. +- Operator override: operator declares "ship it" or "good enough" despite remaining findings. +- Escalation: same HIGH finding persists after 2 W4 revision attempts → W5 surfaces with diagnosis that the issue may be upstream (W3 beat sheet, W2 skeleton, W1 angle). + +### Loop Status Note (Architecture-Ready, Not Yet Wired) + +The loop architecture is operational at the W5 spec level. The W4 consumption logic (how W4 reads structured findings and triggers revisions) needs wiring at the W4 spec level when the team is ready to enable automation. Until then, W5's structured findings are operator-facing decisions, not W4 inputs. + +--- + +## ANTI-PATTERN CATALOG + +Diagnostic labels. Names for problems — used to communicate what's wrong, not prescriptions for what to do. Most cross-link to formal flags in `microbeat_taxonomy.md` Section 9 or `voice_style.md` §6. + +**Opening:** World-before-crisis. Protagonist without problem. Backstory dump. Vague stakes. Generic opening. Single-register empathy. Flat command open. *(See voice_style §6 abstract-lore-open, trauma-summary.)* + +**Beat-level:** Novelistic drift. Label-as-content. Misinterpretable beat. Zero-function moment. Static beat. *(See taxonomy STATIC-BEAT.)* + +**Throughline:** Tension resolution before midpoint. Micro-resolution. Throughline drift. Emotional beat repetition. Window order violation. + +**Character:** Passive protagonist. Antagonist without teeth. No emotional anchor. Stakes character investment mismatch. Cartoon-bully villain. *(See voice_style §6 cartoon-bully + §1 Principle 2.)* + +**Pacing:** Staccato fragmentation. Over-clever voice. Rushing the event. Summary cuts. Decorative simile. Narrator essay. Tension-release stage directions. + +**Structural:** Convenience arrival. Beat overload. Mechanism repetition. IM desert. IM flavor duplication. Classic Woodward. Flat injustice beat. Parallel redundant beats. *(See taxonomy MECHANIC-TOLD-NOT-SHOWN, INJUSTICE-LABELED-NOT-INFLICTED.)* + +**Resolution:** Cliffhanger closes instead of opens. Mystery collapse in CTA. Resolution cliffhanger. *(See taxonomy CLIFF-RESOLVES.)* + +**Dialogue (script-only):** Dialogue thinness (volume below target). Untagged narrator paragraphs in Multi-Cast VO. W3 staging contradicted by W4 invention. *(See W4 spec Dialogue Generation + W3 Staging Source of Truth.)* + +--- + +## ITERATION + +If W5 surfaces findings and the operator chooses to revise: + +- **Beat sheet revisions** → return to W3 with the structured findings as input. +- **Script revisions** → return to W4 with the structured findings as input. W4's tiered revision (auto-revise once / surface) consumes the CRITICAL/HIGH findings directly. +- **Structural revisions touching W2 skeleton** → escalate to W2 with the findings. +- **Angle-level problems** → escalate to W1. + +W5 does not rewrite. Its job ends when the diagnostic is delivered. + +--- + +## ANALYSIS LOCK + +> **Analysis delivered.** [Sub-function name]. + +If the operator wants additional analysis (e.g., Deep Dive after Bucketing), name the next step explicitly: + +> Want a structural Deep Dive? / Want me to re-bucket after revision? / Anything specific to drill into? diff --git a/bte-promo-script/repos/bte-promo-script-repo/working files/beat sheets/.gitkeep b/bte-promo-script/repos/bte-promo-script-repo/working files/beat sheets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/bte-promo-script/repos/bte-promo-script-repo/working files/beat skeletons/.gitkeep b/bte-promo-script/repos/bte-promo-script-repo/working files/beat skeletons/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/bte-promo-script/repos/bte-promo-script-repo/working files/documentation/.gitkeep b/bte-promo-script/repos/bte-promo-script-repo/working files/documentation/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/bte-promo-script/repos/bte-promo-script-repo/working files/w4 scripts/.gitkeep b/bte-promo-script/repos/bte-promo-script-repo/working files/w4 scripts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/series_worlds.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/series_worlds.md new file mode 100644 index 0000000..0bf14fc --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/series_worlds.md @@ -0,0 +1,480 @@ +# Series Worlds — Index + +This file contains routing-level constraints for all active series. Full series bibles live in separate `world_[abbrev].md` files. **Attach the relevant world file when working on a specific show.** + +--- + +## MVS — My Vampire System +**Full Bible:** `world_mvs.md` + +**Primary Setting:** Military Academy (first-year campus). All promos default to events at or connected to the academy. + +**HARD BLOCKS:** +- Quinn cannot be in a world where he is revealed as a vampire or openly uses vampire abilities. The secret IS the tension. +- Quinn's wristwatch permanently displays Level 1. Cannot measure vampire MC. +- The book that granted Quinn's powers dissolved into him. No longer exists. +- Vorden's multiple personalities (Vorden / Raten / the little one) are a private secret. Do not name or explain the system upfront. +- Peter betrayed Quinn and Vorden. Cannot function as a reliable stakes character post-betrayal. +- Brandon Richardson is dead. Cannot appear post-death. +- Layla is a Pure agent (Agent 83) undercover. Do not expose unless selling that specific arc. +- Leo has privately identified Quinn's aura as purple/non-human. Not public knowledge. +- Blood Ritual: 0/2 slots used by episode 100. + +**Available Engines:** Secret Identity (PROVEN — $4.22 CPI, 30% CTI), Underdog Awakening (PROVEN w/ Q2 risk — $3.41 CPI), Self-Sacrifice/Loyalty (untested) + +**Proven Promo History:** +- Weapons: $4.22 CPI, 30% CTI. Fresh Take. Secret Identity. Event-based. +- Live Action 2.0: $3.41 CPI, 19.96% CTI. Opening Compression. Underdog Awakening. Journey-based. Q2 bleed (60.3%). + +**Bottom-Funnel Failures (see Performance Benchmarks):** +- Boneclaw (Cat): $5.80 CPI, 9.39% CTI. Bond/Pack Loyalty. Quinn as open vampire in clan war. HARD BLOCK violation + setting mismatch + entry window violation. Abandoned proven Secret Identity engine. +- Descendant: $4.34 CPI, 15.70% CTI. Fabricated underground palace scenario with invented "Godslayer Level" power. HARD BLOCK violation + scenario fabrication + setting mismatch. Real characters in a fabricated world that IS the promise. + +--- + +## SS — Shadow Slave +**Full Bible:** `world_ss.md` + +**Primary Setting:** Moves through three phases: (1) real world / police station, (2) Awakened Academy (4-week prep), (3) Dream Realm — Forgotten Shore. Listener entry point is Phase 1 or 2. + +**HARD BLOCKS:** +- Sunny's True Name (Lost from Light) is his most guarded secret. If discovered, he can be permanently enslaved (Shadow Bond). No promo can expose it. +- Sunny cannot lie (Flaw: Clear Conscience). He can misdirect and manipulate wording, but cannot speak an untruth. All promos must respect this. +- Sunny's Divine Aspect must not be publicly known. He has constructed a deliberate cover as a delusional, pathetic outskirts kid. This cover is load-bearing. +- The Forgotten Shore has NO Gateway. The human castle is a dead end, not salvation. Do not imply rescue. +- Nephis's healing causes agony "like burning alive" (her Flaw). Never portray healing as effortless. +- Cassie is permanently blind (her Flaw). Will not regain sight. +- Sunny's Shadow Core cannot absorb soul shards. He must kill to gain shadow fragments. Soul shards are currency only. +- Puppeteer's Shroud (Tier V Awakened armor) provides mind-attack resistance — this is plot-critical (saved him from the Soul Devourer). Do not destroy or trade away in promos. +- **TONAL BLOCK: The world is inherently dark (nightmare creatures, horror, survival). Promos MUST counterbalance with Sunny's sardonic humor, the shadow's comedy, the Flaw's absurdist near-exposure moments, and genuine wonder at the Dream Realm's scale. The Police Station promo proved that leading with darkness tanks Gate 2 (Fun) and kills CTI. If the promo feels like suffering instead of adventure, it will not convert. Lean into the comedy and the world-expansion wonder. The tone target is "darkly funny adventure in a terrifying world" — NOT "horror survival."** + +**Available Engines:** Secret Identity (STRONG — triple-layered: Divine Aspect + True Name + can't lie), Underdog Awakening (STRONG — "useless" Temple Slave Aspect, outskirts kid at absolute zero), Self-Sacrifice/Loyalty (MODERATE), Revenge/Justice Denied (MODERATE). Recommended hybrid: Secret Identity + Underdog Awakening. + +**Proven Promo History:** +- Police Station: $8.17 CPI, 10.80% CTI. Opening Compression. Best engagement metrics tested (43.64% 3s play, 23.97% thruplay, 3.49% true completion). Weak bottom-funnel — world feels like suffering, not adventure. Gate 2 (Fun) failures. Only 2 functioning IMs. **Lesson: darkness alone does not convert. Fun must be present.** + +--- + +## FLBM — First Legendary Beast Master +**Full Bible:** `world_flbm.md` + +**Primary Setting:** The Golden Divine Academy — a military-run boarding school for newly awakened elites, built from a converted football stadium. All promos default to Academy events: training, Saturday practicals, field missions, the greenhouse balcony. + +**HARD BLOCKS:** +- Karl's Beast Master class is completely unique. Three claw marks — not in any guidebook. No precedent. Every training plan is improvised guesswork. +- Karl hatched Hawk from a random egg grabbed for breakfast on the train. Not a quest reward. Not destiny. Hunger. +- Beast Spaces are separate per monster. Bonding Thor and Rae simultaneously nearly killed Karl (skeletal, IV drips, Commander-rank emergency food). Bonding is NOT casual. +- Karl starts physically small and underdeveloped — last to hit puberty. Growth spurt is a CONSEQUENCE of bonding Hawk. Do not show Karl as imposing before the bond. +- Karl grew up in a lithium mining town with no technology access. Can't type. Never used a vending machine. Shapes his POV and social positioning. +- The Divine Serum is approximately one decade old. The Academy is improvised. No ancient tradition of elites. +- ⚠️ [UNVERIFIED — DO NOT TREAT AS HARD BLOCK] Dana's forced Idol career path (dance and cosmetology classes mandatory against her will) has no source support in Eps 1–20. Dana appears in source material as a mage and Karl's ally — no idol training mentioned. This may be from later episodes or may be fabricated. Do not build promo engines around Dana's idol path until source beyond Ep 20 is verified. See world_flbm.md. +- The Bureau of Elite Development supersedes Academy authority. Creates genuine institutional tension with Sergeant Rita. +- Karl's power scaling comes from meditation/beast-feeding loop, not from fighting alone. +- 1-in-100 fatality rate on the Divine Serum injection. Available as hook beat, not recurring threat. + +**Available Engines:** Underdog Awakening (STRONGEST — mining-town nobody with unknown class, badge system makes status visible), Bond/Pack Loyalty (STRONG — human-beast emotional core), Secret Power (MODERATE — Karl hides extent of abilities), Institutional Injustice (MODERATE — mining town poverty, military pipeline, Dana's forced Idol path) + +**Proven Promo History:** No successful promos shipped. Untested IP. + +**Bottom-Funnel Failures (see Performance Benchmarks):** +- Juno: $3.50 CPI, 22.50% CTI. Bond/Pack Loyalty. Entirely fabricated character (Juno), Emperor, Alpha Bond — none exist in source material. Character fabrication IS the promise. Strong top-funnel, zero show match. +- Boneclaw (Thor): $3.30 CPI, 26.29% CTI. Bond/Pack Loyalty. Thor is real but enters at ~Ch 60+. Listener installs for Karl-Thor bond, finds only Karl-Hawk for dozens of chapters. Entry window violation. + +--- + +## WBT — Weakest Beast Tamer +**Full Bible:** `world_wbt.md` + +**Primary Setting:** The Imperial Academy of Cultivation and Evolution — built over ancient ruins with a mana vein at ~300m depth. Ren is in Gray Wing (low-potential dorms). Promos default to Academy life: dorms, classrooms, practice mines, expeditions. + +**HARD BLOCKS:** +- Ren's spore is the 0.01% outcome from the cheapest gray egg. It is genuinely the weakest beast ever recorded. NOT secretly powerful. What makes it special is the KNOWLEDGE it grants — not raw power. +- The knowledge awakening requires a specific three-ingredient ancient recipe (male plant + female plant + Ren as host). Cannot be replicated. Ren IS the missing ingredient. +- Ren's knowledge has hard limits: clear up to Silver rank 3. Gold and above = void. Abyssals = zero. These gaps create genuine danger. +- The spore grants only a 10% physical strength increase. That is ALL. The mushrooms are cosmetic. Not a combat ability. +- Ren's parents are 60 years old. Their frailty is emotionally load-bearing. +- The Thousand Days Method requires 1,000 consecutive days with zero failures. One miss = reset to zero. +- Ren's cultivation requires 100 days of agonizing crystal absorption. NOT a montage. +- Beast rank determines social class: Iron = slaves, Bronze = workers, Silver = privileged. Egg color = purchased destiny. +- Second beasts are possible but extremely rare. Mirror mantis core is charging on the mana vein geyser. +- Yino has developed abyssal beast fusion technology. Geopolitical threat is real and escalating. + +**Available Engines:** Underdog Awakening (STRONGEST — verified worst beast in history, visible badge/rank system), Secret Power/Hidden Advantage (VERY STRONG — invisible knowledge, gap between knowing and proving), Bond/Family Loyalty (STRONG — parent sacrifice is emotional core), Institutional Injustice (STRONG — egg color = purchased destiny) + +**Proven Promo History:** Spore Cloud reference script exists as structural annotation but was built from a different version/adaptation. Untested on this source. + +--- + +## TMT — The Mech Touch +**Full Bible:** `world_tmt.md` + +**Primary Setting:** Ves's one-man workshop on Cloudy Curtain (backwater planet), with excursions to Bentheim (port system) and Leemar (Coalition competition venue). + +**HARD BLOCKS:** +- Ves is NOT a potentate. He is in the 96.5% who cannot pilot mechs. Permanent. Irreversible. He will NEVER enter a cockpit. +- The Mech Designer System is absolutely secret. Exposure = death or enslavement. No character can know it exists. +- Lucky is a Gold-ranked gem cat created by the System. Mechanical, not biological. After consuming mysterious alloy, gained energy claws that kill armored humans. Combat capabilities are a secondary secret. +- The X-Factor cannot be measured. Ves's personal theory about emotions bleeding into mech design. No instrument detects it. Speculative and evolving. +- Ves's father Ryncol is missing, NOT confirmed dead. Do not resolve his disappearance. +- Debt: 330 million bright credits. Annual interest ~5M. Miss one payment = lose everything. Manageable but NOT eliminated by Ch 100. +- Design Points (DP) are the System's currency. Cannot convert to credits. Feast-or-famine income. +- Marcella takes 20% commission on gross profit. 10-year exclusive contract. Non-negotiable. + +**Available Engines:** Underdog Awakening (STRONGEST — worst starting position for a mech designer: third-rate education, no money, genetic inability to pilot), Secret Power (VERY STRONG — System is ultimate hidden advantage), Craftsman's Pride/Builder Fantasy (STRONG — fabrication process is tactile and emotional), Bond/Family Loyalty (STRONG — missing father, Larkinson military legacy, 330M debt), Institutional Injustice (MODERATE-STRONG — 3.5%/96.5% genetic divide, third-rate state discrimination) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## PESD — Princess Ebony & the Silver Dragon +**Full Bible:** `world_pesd.md` + +**Primary Setting:** Two rival dragon-shifter kingdoms — Allarion (patriarchal) and Piroria (progressive). Story opens at Allarion's castle, moves through the ball/banishment, then tracks Ebony's survival journey through mountain borderlands. Parallel thread follows Bella at the Lily Training Center in Piroria. + +**HARD BLOCKS:** +- Nova is NOT a regular fire dragon. She is a stone dragon — rarest subtype, granddaughter of the first King and Queen of all dragons. Ancient dragon with intact memories. Any promo treating her as a standard Allarion fire dragon is wrong. +- Radion is a silver dragon with THREE abilities (fire, ice, water). Unique among all living dragons. Sent from Dragos Paradise to stop rebel ancient dragons. His mission is the geopolitical engine. +- The mate bond between Nova and Radion predates their hosts by centuries. Ebony and Greyson are destined true mates — the human bond flows FROM the dragon bond. +- Ebony's cruelty is a genuine character flaw, NOT a misunderstanding. She pinches her nanny to bruises, blackmails, verbally abuses servants. The prophecy says she WILL become wise — but she must BECOME that person through suffering. Do not sanitize. +- Boris' identity is a deliberate mystery building toward a reveal. Do NOT confirm or deny Boris = Greyson. Use the tension without collapsing it. +- Goliak (Prince Idris' dragon) is the actual geopolitical villain — an ancient rebel dragon manipulating a petty prince toward continental domination. +- The prophecy has specific parameters: Ebony will rule two nations as one, will NOT begin her reign in Allarion, the realm of man will be under attack. +- Women in Allarion face codified oppression: cannot rule, fight, train, wield weapons, or have dragons stronger than males. Hiding a dragon = death. Training with a warrior = death. +- Ancient dragon abilities have COSTS and LIMITS. Do not treat ancient dragon power as unlimited. +- Queen Briette is secretly common-born from Arkana. Known only to King Liam and Briette. + +**Available Engines:** Forbidden Power/Hidden Identity (STRONGEST — most powerful hidden dragon, every use risks death), Injustice Engine (VERY STRONG — gender-based legal oppression is the structural engine), Forced Fate/Arranged Marriage (STRONG — married to Boris by king's decree), Mate Bond Refused (STRONG — rejected true mate, now potentially married to him in disguise), Survival/Fish Out of Water (STRONG — princess learning to make fire), Geopolitical Conspiracy (MODERATE — rebel ancient dragons, in setup phase) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## FTP — Forged Through Pain +**Full Bible:** `world_ftp.md` + +**Primary Setting:** Two phases: (1) House Lowell in Castermere County (origin/enslavement, Eps 1–27), (2) Skyreach Sect in The Capital (primary arena, Eps 28–100). Promos should default to either origin or Sect. + +**HARD BLOCKS:** +- Zane's body IS a weapon (Godforge Technique). Literal, not metaphorical. Skin deflects blades, bones denser than steel. Gets STRONGER by being beaten — each blow purges impurities. Do not show Zane seriously harmed by ordinary attacks. +- The Godforge Technique is absolutely secret. No one knows his body is a mystical weapon. Observers note "bizarre physique" but have no explanation. +- The Cobalt Dragon / Furnace / Dragon Scale system is secret. Nine-dragon furnace, black flame, Celestial Essence production — none known to anyone. +- The Shattered Dagger's true nature is unknown. Appears worthless but cuts through virtually anything. Found in Evil Jace's Storage Ring. Do not resolve the dagger's nature. +- Elara is NOT rescued by Ep 100. Imprisoned on Infernal Peak. Zane has NOT freed her. The rescue is his driving goal but is NOT accomplished. +- Zane's father Milo is confirmed dead (poisoned by brothers). Not a mystery. The Greenwind Blade is missing. +- The Codex of Ascension is destroyed. The gold script absorbed into Zane. One-time event. +- The Storage Ring is secret. Legendarily rare. Zane uses it discreetly. + +**Available Engines:** Underdog Awakening (STRONGEST — former heir enslaved as human punching bag, gets stronger from being beaten), Secret Power (VERY STRONG — five separate secret advantages), Institutional Injustice (VERY STRONG — Great Houses monopolize everything, class hierarchy at every level), Bond/Family Loyalty (STRONG — Elara rescue drives every decision), Craftsman's Pride (MODERATE — nascent weaponsmithing arc), Rivalry/Proving Ground (MODERATE — multiple named rivals at different power ceilings) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## SW — Strongest Warlock +**Full Bible:** `world_sw.md` + +**Primary Setting:** Brynhildr Academy — a hidden magical academy in Eastshire. Ethan arrives by accident (swapped train tickets), classified as a Dud (zero magic). Story follows initiation, academic life, magical awakening, duels, and Clash of Manors tournament. + +**HARD BLOCKS:** +- Ethan's magic circuits were DESTROYED at birth by his biological mother (protective spell to hide him from pursuers). He is NOT a late bloomer. He was surgically made powerless. +- Ethan arrived at the academy BY ACCIDENT (swapped train tickets with Alice Quinn). Multiple adults are actively concealing this. The tension of possible exposure is structural. +- Ethan's Origin Magic requires KISSING WITCHES to absorb temporary magic power. Hard mechanical rule. Lips to lips. Power is temporary (hours to ~1 day). Can only absorb from same individual once per week. +- Partial Resonance CANNOT be freely repeated. Using it again could permanently destroy his partially-healed circuits. Oberon's Descent was NOT Partial Resonance — it was Fae Magic amplified by the literal Fairy King. +- The Mermaid Princess Illumina is the spirit of his wand — autonomous, has personality, chose Ethan. Only manifests when he has sufficient magic power. +- Oberon the Fairy King is REAL and has directly intervened. His avatar powered the tournament attack. Not "a spell Ethan learned." +- Ethan's biological parents are unresolved. Do not invent backstory. +- Henry Weiss ("The Mage Slayer") completely nullifies all magic in his surroundings. Do not portray as weak. +- Nicole Asta has a HIDDEN AGENDA from her family. Deliberately conceals full power. +- Lily Langley is a predator wearing a cute mask. Therian wolf transformation. Genuinely dangerous. Do not soften. +- The Kerr noble faction is actively trying to close Dud Manor and seize control of the academy. Institutional antagonist engine. + +**Available Engines:** Underdog Awakening (STRONGEST — zero magic, farmboy at wizard school, every spell is borrowed and temporary), Secret Identity/Hidden Truth (VERY STRONG — multiple layers of secrets that could each destroy him), Injustice Engine (STRONG — Duds are bottom caste, nobles campaign to erase them), Forbidden Power (STRONG — power requires socially taboo kissing), Bond/Loyalty (MODERATE — Dud Manor found family), Self-Sacrifice (MODERATE — loaded but not yet detonated) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## SSSK — Saintly Slaying Sword Knight (Working Title) +**Full Bible:** `world_sssk.md` + +**Primary Setting:** Kingdom of Aleria (vassal state of the Valerian Empire). House Corvin estate, Alerion city, Azuremere lake, The Treasure Pavilion. Prologue set in Valerian Empire's ancestral hall (Aurelia's death). Listener entry point is Aleria. + +**HARD BLOCKS:** +- Aurelia's identity as a reincarnated princess must remain SECRET. No in-world character can discover that Caelia is Aurelia Valerius reborn within Ep 1-8 material. +- Caelia's Aether Channel is DEFICIENT, not absent. Can draw Aether but can't contain it. Restoration is IN PROGRESS via herbs — do not show fully restored channel in Ep 1-8 material. +- The Crimson Sigil Script is UNRESOLVED through Ep 8. Do not explain, resolve, or invent an origin. +- Cassian Alerian's true nature/power is CONCEALED. "Naturally frail" is a cover. Do not resolve. +- Caelia's combat skills come from AURELIA'S PAST LIFE. The body is weak — technique and knowledge, not brute force. +- The engagement ceremony with Valens is ONE MONTH away. Do not resolve. +- Nivalis (Niv) is bonded to Cassian, not Caelia. The attachment is unexplained. +- The Valerian Empire revenge arc (Julian/Livia) is DESTINATION, not entry. Do not anchor promos in Empire settings. + +**Available Engines:** Secret Identity / Hidden Power (STRONGEST — triple-layered: princess identity, Celestial Healer knowledge, combat skills in wrong body), Injustice Engine (VERY STRONG — systemic and personal, from past and present lives), Revenge / Justice Denied (VERY STRONG — reincarnation IS revenge), Empire Building / Secret Power Accumulation (STRONG — Treasure Pavilion, herbs, financial plays), Forbidden Romance (MODERATE — Cassian encounter, early setup), Underdog Awakening (MODERATE — weakened by audience knowing she's secretly powerful) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## RBM — Rise of the Beastmaster (also: ROTB) +**Full Bible:** `world_rbm.md` (also accepted: `world_rotb.md`) + +**Primary Setting:** Two phases: (1) Blazehollow — small southern-marches town where Jasper is disgraced and disowned (Eps 1–32), (2) Pyreborough / Amberbourne College — capital city and premier beastmaster academy, including the Skyward Reliquary (The Cloister) and the Inner Sanctum with its Amber Pagoda (Eps 33–100). Listener entry point is Blazehollow origin. + +**HARD BLOCKS:** +- Jasper's Vitalbound Expanse contains 10 mysterious eggs (Primordial Chaos Beasts). Only ONE hatched (Felix, the Everblaze Inferno Phoenix). The other 9 are dormant through Ep 100. Do not show additional beasts hatching. +- Felix appears as a tiny yellow chick with 1 visible star. His Primordial Chaos Beast nature is absolutely secret. No character knows what he is. Evolves to 6-star after manna purification (Ep 25–26) — do not show 6-star power before this. +- Midas (original Goldroc, 5-star) is DEAD. Killed by Niall Redfern in Ep 1. Cannot be resurrected. +- The Saintbeast Battle Soul was Jasper's discovery, stolen by Niall via Lydia's betrayal. Now credited to Niall. Do not resolve ownership. +- Lydia's betrayal was premeditated — seduced Jasper, framed him as a predator, handed the Battle Soul to Niall. She places an active assassination bounty via Bloodflower Parlour (Ep 47). Do not portray sympathetically. +- Freya Ashdown (mother) has lifesbane curse — 40 but looks 80, six months to live. Cure requires the Grand Master of Skyward Reliquary, who is Freya's father / Jasper's grandfather (SECRET through Ep 100). Grand Master cut her off 20 years ago. +- Jasper's left arm: beast claw with red third eye. Origin mysterious and UNRESOLVED through Ep 100. +- Jasper's false reputation (framed as drug-using predator) persists through Ep 100. Load-bearing — drives institutional rejection. +- Maisie Denholm's origin (found as infant in Abyssal Battlefield, no lifebound beast, 10 sealed abilities) is an unresolved mystery. Do not invent. + +**Available Engines:** Revenge / Justice Denied (STRONGEST — triple-stacked betrayal: romantic, violent, parental; stolen achievement; false reputation), Underdog Awakening (VERY STRONG — disgraced exile with a "one-star chicken," mocked by everyone), Secret Power / Hidden Beast (VERY STRONG — Felix looks like a chicken, IS a god-tier Primordial Chaos Beast), Bond / Family Loyalty (STRONG — dying mother, ticking clock, "That's my boy!"), Institutional Injustice (STRONG — star ratings = social destiny, Thunderbolt Hall controls everything) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## FB — Flameborne +**Full Bible:** `world_fb.md` + +**Primary Setting:** Opens in Landor — a provincial city dominated by rival martial arts families (Ashfords, Palmers, Adlers). Aiden's journey spans three phases: (1) Landor origin — family estate, Heritage Day trials, Hunting Expedition (Eps 1–12), (2) Mountain training with Wes — Sunset Peak, Mount Cinder, Adirondack Woods, Blood Moon Lake (Eps 3–17), (3) Warrior Gate Academy — enrollment, inter-institute competition, Celestial Manor expedition (Eps 18–50). Listener entry point is Phase 1 or 2. + +**HARD BLOCKS:** +- Aiden's rapid advancement comes from THREE separate sources: Wes's elixirs (secret, ongoing since childhood), the Crushing Fist physical training (brutal self-inflicted method), and Dual Cultivation via Eternal Spirit Mastery (unique technique, dangerous). Any promo implying a single power-up or destiny moment violates the show's thesis. +- Wes is a former Heaven-Earth Realm Cultivator whose energy channels are blocked and deteriorating. He is NOT comic relief — he is one of the most powerful people Aiden has encountered, operating in disguise as a tavern owner. Do not kill Wes or resolve his condition. +- The Eternal Spirit Mastery / Dual Cultivation path is UNPRECEDENTED. Aiden is the first person to train both Breakforce (physical) and Mystic Energy Pulse (spiritual) from the ground up simultaneously. Do not treat Dual Cultivation as common. +- Aiden's "Doctor Mask" alchemist identity is SECRET. No one in Landor knows. Do not expose unless selling that specific arc. +- Aiden's cultivation abilities (Mystic Energy Pulse, elemental manipulation, alchemy) are SECRET from his family and the general public. They believe his strength comes from the Blazing Body technique. +- Draco is a half-dog, half-dragon hybrid beast. His true nature is unknown to everyone except Wes and Aiden. Do not portray as a normal pet or a fully mature dragon. +- The Riftstone Blade suppresses the wielder's power while carried (training effect) and contains eight engraved technique instructions. Aiden has decoded ONE move. Do not show mastery of all eight moves. +- Fredrick and Ivy are NOT allies — they are a parallel threat. Wes and Aiden stole the dragon's treasure from them. +- Kasper Cheney is a genuine threat Aiden cannot currently defeat. Do not portray Aiden as Kasper's equal through Ep 50. +- The Celestial Manor expedition is UNRESOLVED at Ep 50. Aiden's team is frozen by Kasper's Spectral Eye and about to be blood-harvested. Do not resolve. +- Casey (the Golden Skeleton) is an ancient Heavenly Chi Master — the "Immortal Sage of the Ten Directions." Circumstances of his death are UNRESOLVED. Do not explain who killed them. +- Nathan Ridley was bribed by the Palmers to sabotage Aiden's academy entrance exam. Aiden defeated him in a public three-move duel. This incident is public knowledge. +- Carter is a Cultivator aligned with the Palmer family who recognized Aiden's Spiritual Energy Force as anomalous. Do not eliminate Carter early. +- The show has TWO parallel power systems (Martial Arts body path + Cultivation energy path). Promos must not collapse them into one system. + +**Available Engines:** Underdog Awakening (STRONGEST — Stage 3 sickly failure mocked by entire family and city, publicly measured Martial Monument), Secret Power / Dual Identity (VERY STRONG — five nested secrets: cultivation, Doctor Mask, Wes, Draco, Riftstone Blade), Bond / Mentor-Student (VERY STRONG — Wes is the emotional anchor, dying mentor who secretly healed Aiden since childhood), Revenge / Proving Ground (STRONG — Cheryl's betrayal is the inciting wound), Bond / Family Loyalty (STRONG — Wren never stopped believing, Oscar bet the family legacy), Institutional Injustice (MODERATE — inter-family rivalry, bribery, but institutions are neutral), Craftsman's Pride / Alchemy (MODERATE — Doctor Mask persona, secondary engine) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## MVS-DR — My Vampire System: A Dragon's Revenge +**Full Bible:** `world_mvs_dr.md` + +**Primary Setting:** Opens in a small mining village on the border between the Alure Kingdom and the Crune Empire. Ray's journey spans: childhood village (origin/injustice), forest rescue, Renny Town (10-year knight preparatory school), and Avrion Academy — a city-sized knight training institution at the kingdom's border. Listener entry point is the village origin. + +**HARD BLOCKS:** +- Ray is NOT the prophecy child. His hair was originally black and turned red due to residual dragon essence. The prophecy seeks a natural-born redhead. Ray is a mistaken candidate — creates tension through dramatic irony, not destiny fulfillment. +- The Dragon System is NOT an AI companion. It is a mechanical interface with a monotone voice that reads notifications. No personality, no dialogue. Do not give it character traits. +- Ray's father Jack Talen is infected, not dead. The Shadow Plague consumed his body and turned him into a shadow beast host. Ray's goal is to find a cure, not avenge a death. Do not kill Jack. +- Amy's death is offscreen. Only the emotional aftermath on Gary and Ray. Do not dramatize the death scene. +- The System's skill unlock condition is surviving life-or-death situations — NOT killing beasts or grinding. Has at least one unexplained exception (the Lancy fight). Do not simplify. +- Noir is a tamed Horned Wolf (tiger-sized, black fur, single horn), not a dragon. Do not upgrade her abilities. + +**Available Engines:** Underdog Awakening / Hidden Power (STRONGEST — reincarnated most powerful dragon, trapped in a human body that can't use magic, deliberately tanks his rank to stay hidden), Injustice Engine (VERY STRONG — red hair = cursed from birth, beaten by the woman he rescued, mob violence against a child, Pureblood faction hunting children by hair color), Revenge / Moral Transformation (VERY STRONG — starts wanting to destroy humanity, found-family erodes the goal), Found Family / Bond Engine (STRONG — Black Sash knights, roommates, the group promise), Secret Identity / Dual Life (STRONG — hides dragon heritage, System, true strength, Noir, elemental powers), Survival / Fish Out of Water (MODERATE — a dragon trying to operate a human body), Geopolitical Conspiracy (MODERATE — Pureblood infiltration, Shadow Plague, in SETUP phase) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## BW — Blood Warlock +**Full Bible:** `world_bw.md` + +**Primary Setting:** Arcadia University during a sudden apocalyptic event. The Soul Record appears as a planetary system interface. Ben's journey spans: dorm survival (Ep 1–10), gym fortress / group formation (Ep 10–20), Kyle faction war (Ep 30–42), female dormitory rescue (Ep 42–58), and blood berserker job trial (Ep 59–71). All promos default to campus-based material. The world beyond campus is unknown and unexplored. + +**HARD BLOCKS:** +- Lilith is a Sixth Order Succubus — advisor, combat teacher, strategic guide. Invisible to all other humans. NOT a love interest through Ep 71. Do not write romantic consummation or love confession. +- Lilith CANNOT directly intervene in combat. She watches, advises, and collects loot. Ben must earn every victory himself. Structurally load-bearing. +- Ben's family status is UNKNOWN, not dead. He could not reach them by phone. The uncertainty IS the emotional engine. Do not kill Ben's family. +- The Soul Record is NOT an AI companion — no voice, no personality, no dialogue. Pure mechanics. +- Kyle Lambert is dead (Ep 39–40). Ben threw him to the zombies. Canon and public knowledge. Do not resurrect. +- Ben's Blood Berserker job trial is NOT completed through Ep 71. He is stuck at Level 25. Do not show Ben as First Order evolved. +- Brooke's romantic feelings for Ben are ABSENT through Ep 71. Do not write a Brooke-Ben romance. +- The world beyond campus is UNKNOWN. No one has left Arcadia's grounds by Ep 71. Do not depict military rescue or confirmed safe zones. + +**Available Engines:** Underdog Awakening / Hidden Power (STRONGEST — nobody college student with 109 mana, eleven times the human average, unique Blood Manipulation skill), Injustice Engine (VERY STRONG — apocalypse as injustice, strong prey on weak, Kyle feeds people to zombies), Survival / Lone Wolf (VERY STRONG — Ben's default mode is solo, emotional walls are the character engine), Revenge / Cold Justice (STRONG — calculated punishment, not hot-blooded), Found Family / Bond Engine (MODERATE — building slowly, Evan/Katie/Lana/Derek subordinates, in SETUP phase), Secret Identity / Hidden Strength (MODERATE — hides true power and Lilith's existence, but increasingly public displays) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## TBB — The Billionaire's Bodyguard +**Full Bible:** `world_tbb.md` + +**Primary Setting:** Aspen Hills — a wealthy suburb where old money and new tech wealth collide. Promos default to: Maple Grove Academy (elite prep school), Windermere Estates (Stella's villa complex), Hart Towers (corporate headquarters), and surrounding areas. The social geography is sharply divided between the ultra-wealthy and everyone else. + +**HARD BLOCKS:** +- Brian Woods is "Eagle" — a covert operative and trained assassin with years of war zone experience. NOT a normal high schooler. Do not portray Brian as learning to fight or discovering hidden strength — he's already elite. +- The Mystic Jade Pendant warns Brian of danger (trembles/glows) and occasionally signals fortune. Powers are EXCLUSIVE to Brian. Do not treat as fully understood or give it new powers. +- Dragon Mastery Techniques: Brian has mastered the first level. Higher levels require the Dragon Cave of Mystics, which opens only once every five years on a full moon. Do not skip progression. +- Samuel Lin is Brian's adoptive father/mentor — connected to an international assassin organization he once helped found. Do not kill Samuel or reveal his full backstory casually. +- Robert Hart's true purpose for Brian is UNREVEALED. Connected to "an old promise" between families. Do not invent or reveal this mission. +- Cody Marlow (codename "Hound") has severe internal injuries — slowly dying. Brian is secretly treating him with herbal remedies. Teammate "Pangolin" is presumed dead but no body found. Do not heal Cody quickly or confirm Pangolin's death. +- Lily (from Brian's past) is a hanging thread. Do not introduce directly in early promos. +- Kylie Warner (codename "Seven") is an enemy Brian accidentally created. Do not make her an ally or romantic interest. +- The kidnapping conspiracy involves someone INSIDE Hart Group (Curtis, still unidentified). Do not resolve early. +- Stella's mother is ALIVE but estranged, not dead. Brian misunderstands and thinks she's dead. Do not clarify until the show does. + +**Available Engines:** Secret Identity (STRONGEST — "Eagle" posing as scholarship student/bodyguard, dramatic irony in every scene), Underdog Appearance / Hidden Competence (VERY STRONG — looks poor, dismissed by rich students, every underestimation sets up a reversal), Protective Bond (STRONG — protects Stella who treats him with open hostility, asymmetric giving), Injustice Engine (STRONG — rich/poor divide visible in every scene), Forbidden Power / Hidden Asset (MODERATE — pendant, Dragon Mastery, assassination training must be concealed), Found Family / Reluctant Bond (MODERATE — Brian has never had real parents, drawn to warmth of Stella's household) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## TSS — The Seventh Seal +**Full Bible:** `world_tss.md` + +**Primary Setting:** The Ardunian Empire on the Brilliance Continent. Promos default to: (1) House Phoenix estate, where Serena was raised as the "disgrace" and hidden heir, and (2) Saint Laurent Academy, where she enrolls disguised as a boy ("Jude Vale"). A contained subplot arc takes place in Lava Valley (Eps 22–32) for Celestial Phoenix bonding. + +**HARD BLOCKS:** +- Serena Vale is a reincarnated soul from the 24th century — a legendary master thief known as the "Thief Goddess." She retains full adult intelligence, combat instincts, and thieving skills. Her "idiot" act is 100% performance. Do not portray as naive or a slow learner. +- The original Serena Vale was genuinely developmentally delayed due to the Seven Stars Moon Seal placed at birth. She died at thirteen from injuries inflicted by Clara and Caleb. Do not invent reasons beyond the seal. +- Lucien is a demon bound inside Serena's body via Soul Contract. Cannot kill Serena. Broke the first seal layer. His true name, origin, and reason for being inside Serena are UNRESOLVED. Do not invent backstory. +- The Seven Stars Moon Seal has seven layers. Only the first has been broken. Do not break additional layers unless source material does. +- Serena can train in BOTH Aura AND Magic simultaneously — unprecedented on the Brilliance Continent. Do not understate how freakish her advancement is. +- At Sixth Rank Magic, Serena chose the Warlock class — despised, nearly extinct. Warlocks use Curses (hand signs, no chanting). The God Realm actively suppresses Warlocks. Her Warlock identity is her most dangerous secret. Do not reveal unless selling that specific arc. +- The Celestial Phoenix chose Serena, rejecting the family prodigy. Takes the form of a small, arrogant boy. Ancient, proud, condescending. Do not portray as docile. +- Serena disguises herself as "Jude Vale" (male) at Saint Laurent Academy. Do not break this cover unless selling the exposure threat. +- Serena's parents (Lucifer Vale and Celeste Alarie) were murdered when she was one month old. Circumstances UNRESOLVED. Celeste's origins completely unknown. Do not invent details. +- Silas Vale is NOT what he appears — drops warmth in private, speaks to Adrian as equal or superior. Executing a hidden plan. Do not reveal his true nature or agenda. +- Adrian Vale deliberately kept Serena weak and invisible to protect her from assassination. His "neglect" was calculated. Do not portray Adrian as genuinely uncaring. +- The warlock investigation at Saint Laurent Academy is UNRESOLVED. Dean Aurelius Vance is actively hunting for the warlock. Ticking-clock threat. + +**Available Engines:** Underdog Awakening / Hidden Identity (STRONGEST — "disgrace of House Phoenix" who is secretly a reincarnated master thief, dual Aura/Magic prodigy, Warlock, and Phoenix master, all while pretending to be an idiot boy), Injustice Engine (VERY STRONG — systematically abused by Clara, Caleb, Marcus, Gaius; called trash, nearly killed; every vindication must be secret), Secret Identity (VERY STRONG — five nested secrets: reincarnated soul, dual training, Warlock, demon inside, disguised heir), Forbidden Power (STRONG — Warlocks hunted and suppressed, the Academy is searching for one, Serena IS the warlock), Self-Sacrifice / Found Family (MODERATE — Adrian's secret protection, Nash's loyalty, built on deception), Bond / Companion (MODERATE — Celestial Phoenix defends and bickers, comedy potential high) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## TS — Trillionaire Sterling +**Full Bible:** `world_ts.md` + +**Primary Setting:** Stonevale University and its surrounding city — an elite American college town where wealth is the social currency. Jed's world orbits between the pizza shop, the scholarship dorm, and the luxury spaces he doesn't belong in (Crystal Hollow restaurant, Blueprint Hotel, Stonevale General Premier Wing). + +**HARD BLOCKS:** +- Jed's Sterling identity is SECRET. His father's murderers — rival deity families — believe the direct Sterling line is extinct. Revealing himself could trigger a war between deity-bound families. +- Jed's powers (superhuman speed, strength, healing, senses) are SECRET. His friends do not know. He knocks his own friends unconscious during a rescue to protect this. +- The black card holds ~$1 trillion, called a "tiny fraction" of Sterling wealth. Jed CANNOT spend ostentatiously without risking exposure. The tension between unlimited money and inability to use it is structural. +- Jed's father (Lord Arthur Sterling) was murdered by a coalition of rival deity families. The murderers believe the direct line is dead. This strategic advantage must be protected. +- Jed's father's sacrifice: could NEVER set eyes on his own children. Cosmic decree, not abandonment. +- Jed has siblings scattered in orphanages, none knowing their heritage. Do not introduce or name — unknown through Ch 100. +- The Golden Deity (Aurion) took eagle form and SPOKE to Jed — unprecedented in Sterling history. Do not diminish. +- Jed's sacrifice (due by next full moon) is UNRESOLVED through Ch 100. Do not invent or resolve. +- Mrs. Diaz is in a COMA (not dead). Do not kill or wake her. +- Martin Garcia is DEAD (killed by Jed, Ch 18). Cannot be resurrected. +- Chris Jones is NOT deity-connected — mortal bully. Do not elevate to supernatural threat. +- There are SIX other deity families besides the Sterlings. Do not invent specific abilities for named rival families. + +**Available Engines:** Hidden Heir / Secret Identity (STRONGEST — orphan pizza boy secretly the most powerful heir on earth, trillion dollars he can't use, name he can't speak), Underdog Awakening (VERY STRONG — grease-stained clothes in marble halls, visible poverty as social hierarchy), Injustice Engine (VERY STRONG — orchestrated betrayal + beating + dumping in trash, wealth-based contempt from authority figures), Protective Bond / Found Family (STRONG — Ella/Mrs. Diaz as adopted family, friend group as emotional anchor), Self-Sacrifice / Covenant Price (MODERATE-STRONG — father's sacrifice as backstory, Jed's unknown sacrifice as ticking clock) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## DTE — Dark Tide Express +**Full Bible:** `world_dte.md` + +**Primary Setting:** Year 2069. The Infinity — a fortress train on the Arc Rail (200,000+ mile global railway) — fleeing the encroaching Dark Tide and Polar Night. Starting point: Chicago. Promos default to events on or near the train: scavenging runs, creature encounters, survivor camp politics, mechanical upgrades. + +**HARD BLOCKS:** +- Jax Walker is NOT a fighter by nature. Former college student. His power (Mechanical Heart) is machine-specific — he builds, devours, repairs, and operates machinery. He IS the train's engine. Without him, the Infinity is dead weight. +- The Mechanical Heart ONLY works on machines. Cannot process supernatural/non-mechanical energy below Level 3 Awakening (confirmed failure on Forbidden Object 1542, Ep 93). Skills are thematically linked to consumed objects. +- Kiki's real name is Annabelle Cross, not Wendy Quinn. Father: surname Wen (Apex Group). Mother: Lucia Cross (beaten to death). Abandoned at orphanage age 3–4. Her backstory is load-bearing for the Devolution arc. +- Kiki's telekinesis has a hard cost: extreme use risks Devolution (Echo Value below 1 = zombie). Nearly killed her twice (Eps 60, 78–81). Do not treat as cost-free. +- Silas Thorne is definitively dead (Ep 63). Devolved into half-corpse, then killed by Tank + Albino Behemoth. +- The Floating Celestial Giant Corpse is UNEXPLAINED. Continent-sized desiccated humanoid floating in clouds above Chicago. Do not explain, name, or give it agency. +- Arcology 9 is 95%+ dead (376,000+ citizens). NOT functional or populated. It is a tomb with resources. +- The Gemini 11R Nuclear Electric Locomotive (Arcology Level 95) is Jax's target upgrade. Do not resolve this acquisition — it lives in the app. +- Forbidden Objects (Big Ben, Taxi LV-857-4040, Phantom Station 1542) are real pre-Collapse items contaminated by unknown power. Cannot be devoured below Mechanical Heart L3. + +**Available Engines:** Underdog Builder / Progression (STRONGEST — scrawny college kid building a rolling civilization from scrap), Survival Against Extinction (VERY STRONG — existential stakes, shrinking daylight, relentless creature pressure), Found Family / Reluctant Crew (STRONG — transactional recruitment → genuine bonds forged in survival), Secret Power / Hidden Capability (MODERATE — Mechanical Heart invisible to others), Protective Bond (MODERATE — Jax/Kiki surrogate family dynamic) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## ZW — Zompirewolf +**Full Bible:** `world_zw.md` + +**Primary Setting:** Two phases: (1) Seraphina's Mansion in Maddencreek — city built on a dormant volcano, Lycan Kingdom of Lycania (Eps 3–16), (2) The Academy in Contingent — elite military training campus atop a mysteriously warm mountain, funded by all five-star kingdoms (Eps 17–50). Listener entry point is the enclosure/mansion origin. + +**HARD BLOCKS:** +- Tristan is NOT a werewolf. He is a Zompirewolf — the only one in the world, a tribrid of Zombie, Vampire, and Werewolf genes. No character in-world knows this. The Mistress believes he is a yellow-blessed werewolf. +- The blessing color is black, not yellow. Tristan always claims yellow. This is his primary cover and a load-bearing secret. Do not reference or hint at his real blessing color. +- All three gene levels must stay within 5 levels of each other. Exceeding the gap triggers gene warfare (agony, potentially lethal). Do not portray his power as freely available. +- Deactivating all three gene traits simultaneously = permanent death. Absolute hard limit. +- Julian Ramsey (System Admin) cannot be summoned — he only initiates contact. His full identity and Syndicate membership are UNRESOLVED. Do not invent backstory. +- Tristan's parents are NOT confirmed dead. They were taken as Lycan tribute. Status UNRESOLVED. Do not kill them in a promo. +- The Wind Daggers (stolen from vampire hunters Elara and Felix) cannot be used publicly — would expose the killings. +- Seraphina has NOT been romantically rejected — she has been survived. Her pheromone ability actively tries to enthrall Tristan. His zombie genes provide partial resistance, not immunity. Do not write romantic payoff. +- Seraphina's true power level is hidden. Through Ep 50, Tristan cannot touch her. Do not portray her as an opponent he is close to defeating. +- The Enrage skill is among the five rarest werewolf abilities. The Director warned Tristan explicitly about it. Do not treat as a generic buff. + +**Available Engines:** Secret Identity / Hidden Strength (STRONGEST — world's first Zompirewolf wearing a slave collar), Injustice Engine (VERY STRONG — humans as livestock at civilizational scale + personal betrayal stack), Underdog Awakening (VERY STRONG — slave mutt goes S-Rank first place, kills Level 10 vampires solo at Level 0/1), Revenge / Cold Justice (STRONG — methodical kill counter, not hot-blooded rage), Found Competence / Institutional Outsider (MODERATE — Innate Detection makes him immune to market manipulation; combat instincts trained under one of the kingdom's most powerful fighters) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## TSR / MI — The Silver Reign / Monster Integration +**Full Bible:** `world_tsr.md` + +**Primary Setting:** Westblood City (Class 6, 70M+ people) Outer Ring and surrounding Miasta Forest. The city borders one of the most dangerous wilderness zones in the Republic. Promos default to: the Outer Ring adventurer building, training facilities, Miasta Forest hunting grounds, and the force-field barrier separating city from death. + +**HARD BLOCKS:** +- Ashlyn has Class 2 strain — modest ceiling (3rd level Specialist). NOT secretly elite. Breaking her bloodline strain is UNRESOLVED through Ep 50. Do not imply destined greatness. +- Michael's 5,692-part Refinement Engine was built by him alone after 3 months of study. Not given, not inherited. Do not simplify to "special engine." +- Michael operates as a solo adventurer with NO organizational backing. He rejected all offers. Do not assign him a sponsor, mentor, or protective org. +- The Supreme Combat Exercise is constant agony. Michael is still progressing through it — not past it. Do not treat it as a completed arc. +- Rose is PRESUMED DEAD (eagle during monster horde, age 11). Do not confirm dead, alive, or resurrectable. +- Michael's younger sibling is UNBORN (8 months from story start). Do not birth or harm. +- Madam Marina's identity and full power are UNKNOWN. Seychelles' true level is unknown. Do not resolve either. +- The Central Continent is a REVELATION — Michael had never heard of it. Do not explain it. +- Jim's true family/organizational background is DELIBERATELY OBSCURED. Do not invent. +- Michael's real destination (Westblood City) is hidden from friends and family. They think he's in Carrol City. Do not expose. +- Skills are technically Corporal-grade+. The Central Continent youths' ability to use them at Private grade is UNRESOLVED. Do not explain. + +**Available Engines:** Bond / Monster Companion (STRONGEST — Ashlyn is the emotional spine; the silver sparrow nobody wanted who chose him back), Underdog Awakening (VERY STRONG — solo, no org, Class 2 strain, fighting above level constantly), Self-Made / Earned Progression (VERY STRONG — engine built by hand, SCE practiced through ungovernable pain, every level through mortal necessity), Survival Engine (STRONG — train tunnel battle, horde flashback, every hunt is life or death), Injustice / Institutional (STRONG — strain hierarchy, cannon-fodder recruitment, wealth gap between org elites and solo adventurers), Protective Bond / Family (MODERATE-STRONG — parents in debt, pregnant mother, unborn sibling, Rose's ghost) + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +## ZAIP — Zero Affinity, Infinite Power +**Full Bible:** `world_zaip.md` + +**Primary Setting:** Three phases: (1) Arden Estate — Baron's mansion, illegitimate son's childhood (ages 5–10), (2) Carwen — small adventurer city, goblin grinding and first party (6 months), (3) Edelgard — mountain crafting city, runic scribing grind and business building (9+ months). Listener entry point is Phase 1 or 2 — the "zero affinity kid abandoned by his noble father" setup. + +**HARD BLOCKS:** +- Roland's transmigrant identity (modern adult consciousness in a child's body) must remain hidden. No character knows the original Roland is dead. This is the foundational secret. +- Roland has ZERO elemental affinity — all four elements at 0%. Unprecedented and permanent. Cannot advance through any standard mage progression. His path is exclusively Runesmith (production class). +- The Runic Mana Scribe class is hidden and unique to Roland. Does not appear in standard class progression books. No character should recognize it by name. +- Roland's Debugging skill reads runes as circuit boards (RED = faulty, GREEN = correct, BLUE = optimal). This is the core mechanical advantage. No one else has this ability. +- Roland cannot fight in melee. Physical stats far below Tier 1 Warrior average. Every physical confrontation won through mana advantage, positioning, or allies. +- The assassination subplot (Eps 26–29): someone beyond the Baron hired a Tier 2 fencer to kill Roland. The contractor's identity is UNRESOLVED. Do not resolve. +- The driverless trucks that killed Roland on Earth had empty driver seats. This is UNRESOLVED and potentially plot-critical. Do not explain. +- Lucienne (toddler half-sister, age 2–3) is Roland's only emotional anchor. NOT a romantic interest. Handle with care. + +**Available Engines:** Underdog Awakening (STRONG — zero affinity labeled as dead-end, abandoned with no money, succeeds through hidden class path), Secret Identity (STRONG — adult consciousness in child's body + hidden class creates double-layered dramatic irony), Revenge / Justice Denied (MODERATE — Baron's economic pressure, assassination attempt, exploitative contract system), Bond / Found Family (MODERATE — Carwen party saves his life; he leaves them anyway) + +**Recommended hybrid:** Underdog Awakening + Secret Identity. The "zero affinity = infinite power" premise is the title's promise. The adult-in-child's-body irony creates natural comedy. The circuit-board-reads-magic-runes mechanic is a unique hook. + +**TONAL CONSTRAINT:** The tone is **dry pragmatism, not isekai wonder.** Roland does not marvel at the fantasy world — he finds it primitive and exploitative. Comedy comes from the gap between his internal systems-thinking and external helplessness (a 10-year-old deadpanning through contract negotiations, calculating XP per hour, calling spell chants "cringy"). If a promo feels like a hero's journey instead of a clever underdog gaming a broken system, the tone is wrong. + +**Proven Promo History:** No promos shipped. Untested IP. + +--- + +# How to Use This File + +1. **This index is always loaded.** It provides HARD BLOCKS, engine availability, and tonal constraints for cross-checking at every workflow stage. +2. **Attach the relevant `world_[abbrev].md` when working on a specific series.** That file contains: core cast tables (with Entry Window and Hook-Anchor Safe columns), full world mechanics, known IM sources with type/tier, flavor notes, character relationship maps, ability breakdowns, and structural notes for promo construction. +3. **If a choice violates a HARD BLOCK listed here, flag it immediately** — even before consulting the full bible. +4. **Show Fidelity (Rulebook §8):** At every workflow stage, cross-check governing elements and structural choices against the world file's Entry Window data and the Fabrication Litmus Test. If a fabricated element becomes the promo's central promise, or the central hook depends on a character outside the entry window, deliver a 🔻 **BOTTOM-FUNNEL FLAG** before presenting. +5. **When new series are added,** create a new `world_[abbrev].md` and add a routing entry to this index following the same format. All cast tables must include Entry Window and Hook-Anchor Safe columns. \ No newline at end of file diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_bw.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_bw.md new file mode 100644 index 0000000..6582ac2 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_bw.md @@ -0,0 +1,119 @@ +# BW — Blood Warlock — Series Worlds Entry + +> **Opening anchor:** first 5 min (the storm, the gut-jolt, the Soul Record) / first 5 eps (dorm-to-gym survival) / first 20 eps (gym fortress + the First Order beetle). **Source verified through:** ep 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_bw_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 from a close read of eps 1–20; Layer 2 + canon limits sampled across eps 20–100. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) + canon gate (limits). Layer 3 is on demand. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **Nobody-to-Apex Awakening (109 mana, ~11x human average)** *(Thruline)* +2. **Apocalypse-on-Campus (Arcadia, day one)** +3. **Blood Manipulation — the unique First Order skill** + +## Protagonist — Ben Carter +**Identity.** A broke 20-year-old Arcadia State student working a repair-shop job so his foster sister Megan can study. When the Soul Record descends mid-rainstorm, he kills a giant bee on reflex and absorbs a First Order **Blood Manipulation** skill — "most people wouldn't see [it] in ten lifetimes" (Ep 14). The engine: the gap between what he can do and the family he can't reach. Underdog Awakening fused to Lone-Wolf survival. +**Combat.** Own body, a looted Breaker Blade, and blood — heating an enemy's blood to burst their eyes, forging blood spears and chains. Weaknesses are real: low Stamina/Health early, fast-draining mana, a Level-25 wall. He wins by reading the fight and exploiting terrain, not by overpowering. +**Power Source.** The **Soul Record** — a status-window system, no voice, pure mechanics. Kill → absorb Soul Power → stats / treasure orbs / skill scrolls. Five external active-skill slots; passives unlimited. Blood Manipulation costs mana per cast; it CANNOT control a living enemy's internal blood, and fire counters it. +**Voice.** Flat, dry, deadpan under pressure; guarded to the point of cold; gallows-humor masking grief. Keeps everyone at arm's length, especially Brooke. Privately all family. Calculating, never cruel for sport; kills without flinching when it's for his own. + +**Voice Samples (verbatim):** +1. "This damn weather's gonna be the death of me…" (Ep 1) — deadpan, pre-apocalypse +2. "I'm not really looking to have my life essence sucked out of me." (Ep 2) — dry, to Lilith +3. "Survive. No matter what it takes. Crawl through fire if you have to. Just. Stay. Alive." (Ep 4) — internal vow +4. "Not until I find my family. I'm not dying to some mutated dog or overgrown insect before then." (Ep 15) — the engine, stated +5. "As long as it is for my sake and the sake of my loved ones, even if I have to kill hundreds of people, I can kill without remorse." (Ep 39) — cold justice, post-Kyle + +**Drift tripwires.** Wins by raw overpowering | controls a living enemy's blood freely | family confirmed dead | Lilith fights for him or becomes a love interest | warm/chatty group-hero voice | evolves past Level 25 inside the opening window. + +## Setting — Entry-Window World (Arcadia State, day one) +**Feel.** A prestigious Manhattan campus — "a city within a city" — turned overnight into a life-or-death gauntlet under a relentless apocalyptic storm. Glass towers, the dorms, the steel-doored gym fortress at the center. Outside: zombies (one scratch kills), man-sized bees, truck-sized animals, a fire-wreathed First Order beetle. Predators eat each other to evolve. Phones give a dead-line robotic voice. The world beyond campus is unknown — nobody has left the grounds. + +**Sensory Samples (verbatim):** +1. "The sky cracked open like it was mourning the end of the world. Rain slammed against the glass, thunder roared overhead—and Ben Carter had no idea his life was about to end." (Ep 1) +2. "But no one stopped. No one even looked back. They were too busy running for their own lives. Within seconds, she went still." (Ep 1) +3. "The number you are trying to reach is either turned off or out of service. Please try again later." (Ep 10) + +**Drift tripwires.** Off-campus world shown/explored | military or confirmed safe zones | zombies as slow comic filler rather than lethal | the storm as backdrop rather than pressure. + +## Tone Constraint +Survival-horror underdog drama, not a flex. Ben's power is constantly undercut by lethal stakes (one scratch = death) and the family he can't reach. If a beat lets him win effortlessly with no cost and no injustice, the show has broken. + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +A normal kid griping about the rain. An earthquake; a jolt through his gut. A green screen: **"The Soul Record has arrived on Planet Earth."** Outside, a sobbing teenage girl is run down — bitten, killed, ignored by a fleeing crowd — and rises as a zombie. A man-sized bee crashes the window; Ben beats it dead with a chair, absorbs a First Order **Blood Manipulation** scroll. A woman in the corner smiles: "My name is Lilith… a Sixth Order succubus." + +## First 5 episodes *(the first sitting)* +Ben fights down through the dorm and out into a campus horror show, cutting a path while reluctantly saving strangers (and punching out one he saw get scratched). He loots a **Breaker Blade**, beheads zombies by the dozen, and pushes for the **gym** shelter. He watches Leon throw a girl to a mantis to save himself. Lilith establishes the rules: kill, absorb, diminishing returns, predators everywhere. + +## First 20 episodes *(texture band)* +The gym fills with ~100 survivors. The other strong ones surface: **Brooke Snow** (ice, student-council president, untouchable), **Chase** (archer, military family, believes in law), **Logan** (hammer, brute). Ben claims the cafeteria as a private base and works alone. **Ep 10–11:** mom, sister, dad — all dead lines; he breaks down; Lilith reframes it (the mana wave fried the signal — they're probably alive). He awakens passives from who he is (**Stone Heart**, Ep 13). **Ep 18–20:** he barely survives his first death-fight, a fire-wreathed **First Order Blazing Beetle**. + +## HARD BLOCKS *(opening-binding)* +1. **Lilith CANNOT intervene in combat.** She watches, advises, collects loot; acting beyond commentary strips most of her power (Ep 16). Ben earns every victory himself — load-bearing. +2. **Lilith is invisible to all other humans** and is NOT a love interest through Ep 71 — advisor/teacher/strategist only. Flirting is texture; no consummation, no confession. +3. **Ben's family status is UNKNOWN, not dead.** He couldn't reach them by phone (Queens, across the city). The uncertainty IS the emotional engine — do not kill or confirm them. +4. **The Soul Record is NOT an AI companion** — no voice, no personality, no dialogue. Status windows and mechanics only. +5. **Ben is stuck at Level 25** in the opening window; he CANNOT reach First Order until he passes the brutal Blood Berserker job trial. Do not show him First Order / Blood Will-evolved inside Ep 1–71. +6. **Blood Manipulation is bounded.** He controls his own and dead/spilled blood freely; he can sense but NOT control a living enemy's internal blood; **fire is a hard counter**. Costs mana per cast. +7. **The world beyond campus is UNKNOWN.** No one has left Arcadia's grounds. No military rescue, no confirmed safe zones. +8. **Kyle Lambert is dead (Ep 39–40)** — Ben crippled him and threw him to the zombies. Public, canon. Do not resurrect. + +## Entry map *(tease ok, anchor flags)* +- **Lilith** — Ep 1 (always present in the opening). +- **Brooke / Chase / Logan / the gym group** — ~Ep 6–8. +- **First Order monster (Blazing Beetle)** — ~Ep 18 (first true death-fight); opening *may* tease toward it. +- **Kyle Lambert faction** — surfaces ~Ep 32; resolved Ep 39–40. *Anchor flag.* +- **Female-dormitory rescue (Megan Shaw, blue-skinned zombie)** — ~Ep 42. +- **Job selection (7 options) + Blood Berserker trial** — ~Ep 62. *Anchor flag.* +- **First Order evolution / "One Hit to Kill" / Blood Will** — ~Ep 93. *Hard anchor flag — far past the opening.* + +## Engines the opening supports +1. **Underdog Awakening / Hidden Power (UNTESTED):** a nobody with 109 mana (~11x human) + a one-in-ten-lifetimes skill — wins look impossible from outside. +2. **Injustice Engine (UNTESTED):** apocalypse as injustice — strong prey on weak; a crowd lets a girl die; Kyle feeds people to monsters. +3. **Survival / Lone Wolf (UNTESTED):** Ben's default is solo; his walls (Stone Heart) are the engine, not a flaw. +4. **Revenge / Cold Justice (UNTESTED):** calculated punishment — the Kyle execution is the template. + +## IM sources — opening window +- **The abandoned girl** (Ep 1): killed and ignored by a fleeing crowd, then rises. *Death of the Weak, T1* +- **The dead phone lines** (Ep 10): mom, sister, dad — all out of service; Ben breaks. *Family, T1* +- **Leon's human shield** (Ep 5): the golden boy throws a girl into a mantis to live. *Betrayal, T1* +- **Kyle's reign** (Ep 32+): feeds people to zombies; brutalizes the women's dorm. *Systemic Cruelty, T1* +- **The First Order beetle** (Ep 18–20): a Level-15 nobody forced into a fight that should kill him. *Underdog Peril, T2* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the apocalypse rewards the cruel — the strong prey on the weak (a crowd lets a girl die; Leon and Kyle feed people to monsters) while a broke nobody fights toward a family he can't even confirm is alive. +- **T2 (supporting):** Ben is undervalued and alone — the kid who chose his sister's tuition over his own, walled off because trust hurt him before. +- **T3 (deepening):** every win costs — burning legs on the beetle, mana that runs dry, a Level-25 wall he can't climb without risking death. +- **Drift risk:** if a promo leads with the cool blood powers and skips the abandoned-girl injustice + the unreachable family, empathy collapses and it reads as a flex, not survival. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **Is Ben's family alive?** — the dead phone lines (Ep 10) open the loop; Megan Keyes and his parents are in Queens, across a ruined city. The uncertainty drives everything. Never deliver a reunion or a confirmation — the payoff lives in the app. +2. **The Blood Berserker trial** — at Level 25 (~Ep 62) Ben is offered 7 jobs (most get 3–4) and picks the unique **Blood Berserker**; the trial demands the near-impossible (kill a First Order enemy in a single strike). Initiate the all-or-nothing stakes; the evolution itself pays off ~Ep 93 — withhold it. +3. **What is Lilith really after?** — a Sixth Order succubus who "placed a gamble" on a nobody and has "her own crisis to manage" (Ep 11). Tease the mystery of her endgame; never reveal it in the opening window. +4. **Who else turns predator?** — Lilith's warning ("your death might not come from a monster… but from someone standing right next to you," Ep 12) seeds Leon, Kyle, and the human threat. Sell the dread, not the resolution. +5. **The female-dormitory rescue** — Megan Shaw begs for the survivors starving in the women's dorm, guarded by a blue-skinned anti-magic zombie (~Ep 42). Initiate the rescue stakes; withhold the outcome. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Lilith win a fight for Ben** — she is barred from combat; he earns it alone. +- **The show never confirms the family** (alive or dead) in the source window — the hope is the engine. +- **Blood Manipulation never freely puppeteers a living enemy's blood, and never beats fire** — it has hard, stated limits. +- **The Soul Record never speaks as a character** — it is an interface, not a companion. +- **No Brooke–Ben romance** through Ep 71; Brooke's romantic feelings are absent. Mutual wariness, not attraction. + +--- + +# LAYER 3 → companion: `world_bw_deep.md` · *on demand only* + +**Cross-show contamination:** checked against the `series_worlds.md` index — clean. BW is the only Soul-Record apocalypse-on-campus show; keep Ben/Lilith/Blood Manipulation distinct from other system-apocalypse IPs. **Fabrication note:** the prior-flagged **"State"** detail does NOT appear anywhere in the source and is excluded — consistent with the "world beyond campus is unknown" HARD BLOCK. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_bw_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_bw_deep.md new file mode 100644 index 0000000..5565648 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_bw_deep.md @@ -0,0 +1,112 @@ +# BW — Blood Warlock — Layer 3 Deep Companion + +> On-demand Layer 3 only. Not in the default build path — pulled for canon questions, W2/W3 canon-break checks, or a W5 deep dive. All facts trace to the eps 1–100 source. Reference-formatted; scan, don't read. + +--- + +## Full Cast + +### Core +| Character | Role | Key detail (source) | +|---|---|---| +| **Ben Carter** | Protagonist | 20yo Arcadia State student, repair-shop job; works so foster sister Megan can study. Starting stats are normal except **Mana/Magic 109** (~11x human) — what drew Lilith. Ep 1: kills a Lv5 Giant Bee → absorbs **Blood Manipulation (First Order skill, Lv5)**. Loots Breaker Blade, Full Coat, Velocity Boots, Special Forces Soldier (passive). Awakens **Stone Heart** (Tier 3 passive) and **Health Boost**. Stuck at **Level 25** until the job trial. Picks **Blood Berserker** (unique job, ~Ep 62); evolves to First Order ~Ep 93 ("One Hit to Kill" title, **Blood Will** passive). Guarded, deadpan, family-driven. | +| **Lilith** | Advisor / teacher / strategist | **Sixth Order succubus, Demon Faction.** Appears Ep 1; invisible to all other humans. Flirtatious, ancient, calculating; "placed a gamble" on Ben and has "her own crisis to manage" (Ep 11). **Cannot intervene in combat** — beyond commentary, the Soul Record strips most of her power (Ep 16). Watches, advises, collects loot. NOT a love interest through Ep 71. Her endgame is unrevealed in the opening window. | +| **Brooke Snow** | Rival peer / power player | Senior, student-council president, "ice queen"; **Ice Maker** skill (ice pikes, walls, bullets), magic just below Ben's. From a high-profile family. Cold, calculating, fair; will kill ("with my family backing me up… it should be fine," Ep 39). Mutual wariness with Ben — NO romance through Ep 71. Fights a First Order snake at Ep 93. | +| **Chase** | Group leader / moral foil | Senior archer (bow), athletic, polished, popular; **military family** — believes criminals "should face the law" (Ep 39), uneasy with Ben's brutality. Reunites with Brooke (Ep 8). | +| **Logan** | Brute ally | ~mid-30s ex-campus-security; door-sized warhammer (~2m, 400+ lbs), high Strength via a stat-boost skill. Loud, lecherous, not sharp; invites Ben to team up (Ben declines). | +| **Megan Keyes** | Foster sister (offscreen) | Taken in by Ben's mom at ~9 after her parents died; now a high-school senior, top student, accepted to Arcadia. In Queens with the parents; status UNKNOWN. The emotional anchor. (NOTE: distinct from Megan Shaw below.) | +| **Kyle Lambert** | Human antagonist (dead) | Jock, childhood martial arts; **Air Manipulation** skill; jumped to Lv15 off two mutual-kill mutant dogs. Ruled the women's-dorm survivors as a tyrant — forced himself on women, threw five who resisted to a zombie swarm to watch. Tried to kill Ben the storm night. Ep 39–40: Ben crippled both his legs, dragged him out, fed him to the zombies; looted Hurricane Pendant + Draughtbane Dagger. Brooke ice-shattered the corpse's head so it couldn't reanimate. | + +### Secondary / Situational +| Character | Notes | +|---|---| +| **Leon Chase** | Student-government VP, "golden boy"; threw a girl he'd been flirting with into a Great Fast Mantis as a human shield to live (Ep 5). Witnessed only by Lilith. | +| **Evan Foster** | Frail, overlooked, blue-collar kid; insists on killing his first zombie himself with Ben's borrowed sword (Ep 29). Gets a **stealth** ability scroll; becomes loyal to Ben ("repay kindness with kindness"). The first of Ben's recruited fighters. | +| **Katie** | The brave girl who first approached Ben; helps organize the survivor work-roster (food in exchange for contribution). Pragmatic; wants her own strength to survive. | +| **Jenna Cain** | International-relations major; socially shrewd; relays the gym meeting invite to Ben (Ep 12). | +| **Megan Shaw** | Women's-dorm escapee who begs the group to rescue survivors still trapped there; warns of a blue-skinned, green-eyed zombie Kyle's group couldn't pass (~Ep 42). (NOT Ben's sister.) | +| **Professors Harris / Janine Cross / Jiao / Jiao(Jiao)** | Faculty Ben saved; Harris taught his junior-year courses and never looked down on his working-class background. Faculty hold little authority post-collapse. | +| **Claire** | Trembling student comforted by Brooke (Ep 10) — watched friends turn/die; the civilian-fear texture. | +| **Maddie** | Communications senior who "willingly" allied with Kyle, gave orders, looked down on the weak — adapted to power fast. | +| **The Blazing Beetle** | First named First Order monster — elephant-beetle, ~3.5m, metallic armor, yellow flames (fire counters Blood Manipulation). Ben's first true death-fight (Ep 18–20). | +| **The Anti-Magic Zombie** | Blue-skinned, green-eyed First Order zombie (Lv33) guarding the women's dorm; killing it (~Ep 59–61) pushes Ben to Level 25 and the job trial. | + +> **Canon-collision note:** prior series_worlds.md listed Ben's recruited subordinates as **Evan / Katie / Lana / Derek**. Source verifies **Evan Foster** and **Katie**; **Lana** and **Derek** do NOT appear in eps 1–100. Treat Lana/Derek as unverified — do not cite as canon without re-confirmation. + +--- + +## World Mechanics + +### The Soul Record (system) +- A cross-dimensional "phenomenon or entity" (Lilith, Ep 13) that stirs a world's dormant mana and forces every species to evolve. Arrived on Earth Ep 1. +- **No voice, no personality, no dialogue.** Pure interface: status windows, notifications, evolution requirements. NOT an AI companion. +- **Kill → Soul Power.** A defeated enemy releases a soul orb absorbed by the killer → stats, and if the power gap is large, a **treasure orb** or **skill scroll** instead. +- **Diminishing returns:** killing same-type/level enemies yields less over time as the soul builds "resistance" (Ep 2). Leveling fully restores Health/Stamina/Mana. +- **Why the world broke (Lilith, Ep 11):** dormant mana suddenly moving "rips the old order apart." Fragile humans collapsed → mindless mutated husks (zombies). Sturdier animals/plants evolved fast. Single-celled organisms (viruses) can't resist mana → don't evolve (Ep 17), so disease isn't a mana threat. + +### Stats & leveling +- Stats: **Strength, Agility, Health, Stamina, Mana, Magic.** Pre-apocalypse humans had <~10 total across all stats; a Lv2 creature ≈ 2x an average person. Ben's outlier was Magic/Mana 109. +- ~2 free stat points per level; elite/higher-level kills drop bonus stats. Ben hoards points for emergencies, dumps them mid-fight when needed (e.g., into Agility vs. the mantis). +- **Level 25 = the wall.** All beings must choose a **job/class** and pass an **evolution trial** to advance to **First Order**; until then all Soul Power is stored and no further leveling occurs. The gap between Lv24 and Lv25/First Order is "as big as the difference between Lv1 and Lv24, if not bigger" (Ep 18). +- **Orders:** Order escalation is a metaphysical rift, not additive. Killing across Orders is "borderline legendary"; killing a First Order in one strike is what Ben's unique trial demanded. + +### Jobs / classes +- At Lv25, a menu of jobs appears — most get 3–4 options. **Ben got 7:** Swordsman, Mage, Assassin, Mechanic, Blacksmith, Martial Warrior, **Blood Berserker**. (Assassin tied to his Special Forces skill; Mechanic/Blacksmith to his old repair life.) +- **Blood Berserker** = a **unique** job (Berserker alone is already rare; "Blood Berserker" Lilith had never heard of). Job appeared because of how Ben used Blood Manipulation. +- **Blood Berserker trial (Ep 63):** (1) kill 100 unranked enemies in a single Blood-Manipulation attack; (2) kill 2 First Order enemies using Blood Manipulation **on himself**; (3) kill 1 First Order enemy **in a single strike**. The third is near-impossible for a Lv25. Completed ~Ep 93 → First Order, title "One Hit to Kill," passive **Blood Will** (resolve/strength harden the closer he is to death). + +### Blood Manipulation (First Order skill) +- Came from the blood-hungry Giant Bee; "a skill most people wouldn't see in ten lifetimes" (Ep 14). Pushed to **Level 5 (peak)** immediately — Lilith had never seen a First Order skill maxed that fast. +- **Effects:** control his own blood (steadies fear/mind — the cardiovascular-emotion loop, Ep 2); manipulate dead/spilled blood into spears, chains, frozen arrows, armor; heat an enemy's internal blood to burst eyes / ignite organs. +- **Hard limits:** he can sense but NOT freely control a **living enemy's** internal blood early on (Lilith's blood "steady… control it? Not yet"); **fire is a perfect counter** — flames evaporate the blood (Blazing Beetle, Ep 19); every cast costs mana, and his mana drains him to near-collapse at full power. +- **Evolution path (Ep 14):** collect 100L blood from 50+ Lv5+ enemies; 10L from 5 First Order; 1L from 1 Second Order — brutal, long. + +### Other skills (opening window) +- **Special Forces Soldier** (unclassified passive): elite human combat/firearms expertise; turned Ben from "no combat experience" to functional fighter. +- **Stone Heart** (Tier 3 passive, awakened Ep 13): emotional armor — others (esp. opposite sex) can't sway him unless truly close; **side effect:** affection for his inner circle intensifies. Born of past betrayal; subtly hardens his worldview (he kills without flinching post-Kyle). +- **Health Boost** (unclassified passive): +20 Health, flat. +- **Skills come two ways:** scrolls from first-kills, and **internal awakening** from who you are / what you've lived (Stone Heart). Five external active-skill slots max (brain-overload limit); passives unlimited. + +### Gear / treasure tiers (Lilith, Ep 8) +- Rainbow tiers, weakest→strongest: **Red (standard) · Orange (rare) · Yellow (magical) · Green (epic) · Cyan (legendary) · Indigo (semi-divine) · Violet (god-tier).** Even a red orb "more valuable than a military-grade rifle at this stage." +- **Ben's early kit:** Breaker Blade (rare; +20 Str, cuts anything **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_flbm_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — L0/L1 traced to verbatim eps 1–20; eps 20–100 sampled for threads/limits. + +> **How this file is read.** L0 is the only default load. L1 loads at W1 + canon gate; L2 at W1 (threads) + canon gate (limits); L3 (companion) on demand. Build top-down; keep the top fast. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **Beast Power Progression** *(fantasy element)* +2. **Academy Setting** *(setting)* +3. **Class System / miner's kid among elites** *(character stakes)* **(Thruline)** — "everyone's been underestimated for where they came from." + +## Protagonist — Karl +**Identity.** Lithium-mining-town kid, fourteen, last to hit puberty, "below average sized," no last name recorded — "dirt floor poor." Parents are living miners he can't afford to phone; his goal is to earn enough to "move them out of the mines." Drew the one marking (three claw marks) no guidebook covers — so the Academy gives him a personal tutor and treats him as a test subject. Engine: **Underdog Awakening** — an unknown class inventing his own power while everyone assumes he's a nobody. +**Combat.** Strategic, observant, never cocky-strong. Reads threats with Super Vision, positions, stays covered; Rend is fast/multi-hit, not heavy. Energy-depletes after a few casts. Reflexively underreports his abilities to avoid becoming a target. +**Power Source.** Three-claw Beast Master class. Bonds infant/egg monsters into a **Beast Space** (a mental dimension built by meditation) and inherits the beast's skills at *reduced* power (Hawk → Super Vision, Rend). Each beast needs a **separate** space; his physique strengthens as the beast grows. First beast came by **accident** — grabbed a kitchen egg out of hunger; it vanished into his mind and hatched. No ritual, bloodline, or mentor. CANNOT will one into being (tries for a dragon, gets nothing). +**Voice.** Self-aware, jokingly defeatist, thinks plans aloud. Dark humor about his situation; treats Hawk as a peer ("Alright, buddy"), not a tool. Names his fears (mines, starvation, being small) instead of projecting hero confidence. + +**Voice Samples (verbatim — never paraphrase):** +1. *"Claw!" Karl shouted, but nothing happened. "Nope, yelling out skill names isn't gonna do it."* (Ep 3) — self-correcting pragmatism +2. *"I felt right with a short sword in my hand, and the marking seems to have something to do with animals, so maybe I'm a hunter of some sort, or a park ranger with bad luck."* (Ep 3) — joking self-assessment +3. *"Just stay behind me then, and undo your coat so you can hide your head. Earth Mice aren't smart, and they won't target your face if they can't see it."* (Ep 6) — tactical directness +4. *"Alright, buddy, we will go to the Cafeteria and find some meat."* (Ep 10) — peer tone with Hawk +5. *"There are at least two iron tusk boars in those trees. I can see the torn tree bark at different heights."* (Ep 7) — observation made actionable + +**Drift tripwires.** Karl named legendary/famous at entry | hero-confident voice | hides Hawk from teammates | wins on raw strength alone | celebrated lineage or family name | physically imposing/tall before the Hawk feedback. + +## Setting — Entry-Window World +**Feel.** The Golden Divine Academy: a football stadium converted ten years ago, isolated, one road in/out beside the rail, ringed a kilometer out by grassland/forest/swamp the new students cross on foot to arrive. Magically expanded dorms (rooms bigger inside than out; staircases that only reach your floor). Karl's tiny balcony room hides a self-sustaining greenhouse. Badge color worn on the jacket — White = nobody, Black = Awakened — visible to all. Military chain of command; ambient bullying; the poorest, least tech-literate kid is the obvious target. + +**Sensory Samples (verbatim):** +1. *"Without all the dust from the mines, it smelled strangely like trees and flowers here."* (Ep 6) +2. *"Blood clogged his lungs, leaving him drowning while sitting in the metal folding chair of his school's auditorium."* (Ep 1) + +**Drift tripwires.** Academy framed as an ancient tradition (it's a decade old) | badge system absent/meaningless | beasts as external tools not dependents | Academy as exclusively safe. + +## Tone Constraint +Grounded underdog with warm comedy, never wish-fulfillment power fantasy. Growth is real but *costly and public*; the bird has opinions and a stomach. If a beat makes Karl effortlessly strong or chosen-by-destiny, the tone has slipped — the nerve is a poor kid out-thinking a rigged room, not a prodigy steamrolling it. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +The recruitment-drive injection in the school gym. The shot "only supposed to hurt as the needle poked you" instead tears him apart inside — blood in the lungs, world goes black; Karl thinks he's the 1-in-100 fatal reaction. He survives. Three claw marks appear on his forearm, growing more realistic as he stares (flesh torn, skin smooth underneath). The injustice is set: a poor kid risks death for a lottery ticket out, draws a mark nobody can explain. + +## First 5 episodes *(the first sitting)* +The marking isn't in the guidebook ("no last name recorded") — he's on his own. Hungry, he grabs a kitchen egg → *[Suitable Pet Target Found: hatching]* → a Windspeed Hawk hatches in his mind. He's a creature-bonding class: Super Vision and Rend at reduced power, a Beast Space built by meditation. He underreports his abilities on the homework. Established here: Karl + Hawk, the Beast Space, badge ranks (White/Black/Bronze), and the field-crossing arrival where he leads strangers (Dana, James, Kruger) to the gate first. + +## First 20 episodes *(texture band)* +Sergeant Rita as personal tutor; morning skill-interception drills (Karl + Hawk block a whole mage class); afternoon martial arts. Resource cultivation begins — monster blood, strength stones, Headmaster-made Wind Stones rocket Hawk fledgling→Awakened in single sessions, dragging Karl's physique up with him. He outgrows uniforms weekly; the greenhouse balcony becomes home base. Dana is present as ally; Bureau, Thor, Rae and field missions have NOT entered. + +## HARD BLOCKS *(opening-binding)* +1. **Karl's three-claw Beast Master class is genuinely unique** — not in any guidebook, no Academy record, never seen by teachers or brass (Ep 2, 4, 11). The uniqueness earns him a personal tutor. *(NB: wild beasts and bear-shifting Druids exist everywhere — unique is Karl's bonding/taming class, not "beasts exist.")* +2. **The show never gives Karl a beast it doesn't actually grant him.** Source beasts: Hawk (Windspeed Hawk, Ep 3–4), Thor (Lightning Cerro, ~Ep 83), Rae (Bloodbath Spider, ~Ep 84). Karl *tries to will a dragon and gets nothing* (Ep 3). Never invent a beast (wolf pup, dragon) — fabricated-beast promos are the documented failure mode (deep doc). +3. **The first beast came from hunger and accident** — grabbed a kitchen egg, it vanished into his Beast Space (Ep 3). Not a reward, ritual, or curated pick. Tonally load-bearing. +4. **Karl starts small and lowest-status** — last to hit puberty, "below average sized," no last name, no phone, no tech literacy, "dirt floor poor" (Ep 1–2, 10). His growth is a *consequence* of the Hawk feedback loop/injections — never imposing before that. +5. **The elite system is new and experimental.** Serum reverse-engineered over decades from a broken ancient System Stone; Academy a decade-old converted stadium; strongest graduates mid-twenties (Ep 2, 4, 12). No centuries-deep tradition. +6. **Beasts are dependents, not gear.** Hawk has a stomach, ego, grudges, and a vote on his Beast Space. Suppressing the beast's personality breaks the emotional core. + +## Entry map *(tease ok, anchor flags)* +- **Sergeant Rita (tutor)** — ~ep 11. *Opening-safe.* +- **Resource cultivation / Wind Stones** — ~ep 14–20. *Opening-safe.* +- **Goblin Town mission (off-Academy, Black-badge promo)** — ~ep 38–52. *Anchor flag.* +- **Skill books / Prince Axel + Overlord Drake** — ~ep 55–57. *Tease only.* +- **Bureau of Elite Development / Colonel Valerie** — ~ep 60–61. *Tease only.* +- **Dana's forced entertainer/idol track** — stated ~ep 27, named ep 61. *Tease only — NOT in 1–20.* +- **Hawk grows giant (injection mutation)** — ~ep 69–70. *Tease only.* +- **Thor & Rae; near-death double-bonding** — ~ep 81–84. *Anchor flag: late.* +- **Crystal-chamber teleport cliffhanger** — ep 100. *Tease only.* + +## Engines the opening supports +1. **Underdog Awakening (PROVEN top-funnel, UNTESTED at fidelity):** mining-town nobody, unknown class, smallest in the year; badges make the White→Black ascent publicly verifiable. Strongest fit. +2. **Bond / Pack Loyalty (PROVEN top-funnel — must anchor Karl+Hawk):** the human-beast bond is the emotional core. Fabricated or late beasts failed downstream (deep doc). +3. **Secret Power / Hidden Advantage (MODERATE):** Karl conceals his abilities — hides advantages, not a forbidden nature. Support, not spine. +4. **Institutional Injustice (MODERATE):** mining poverty; the casualty-cutting pipeline assigning him a low-ceiling support role; the Board planning students' lives unasked. Real, not primary. + +## IM sources — opening window +- **Injection nearly kills him** (Ep 1): blood clogs his lungs — "the one in a hundred." *Cost-of-Entry, T2* +- **Unreadable claw marks** (Ep 1–2): not in the book, "no last name recorded," left alone. *Injustice/Status, T1* +- **The egg vanishes** (Ep 3): grabs it from hunger; a hawk hatches in his mind. *Discovery, T1* +- **Field crossing** (Ep 6–8): first into a kilometer of rock-throwing mice; leads strangers through on mining instinct. *Underdog-Proves, T2* +- **Wind Stone breakthrough** (Ep 16, 20): one stone takes Hawk fledgling→Awakened in an hour, Karl surging with him. *Power Escalation, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the rigged sort — born poor, one shot out, draws a class nobody will help with, written off on arrival. +- **T2 (supporting):** the survival cost — near-fatal injection; constant hunger; carrying a beast everyone calls worthless. +- **T3 (deepening):** institutional disposal — leadership steering him toward a "support/test subject" role to cut casualty counts. +- **Drift risk:** play Karl as a lucky prodigy enjoying elite life and the injustice nerve dies (CTI collapse) — empathy is "underestimated kid in a rigged room," not "kid wins the lottery." + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **Will the poor kid actually break the badge ceiling?** — pays off ~ep 47–52 (White→Black, first in his year, after Goblin Town). The publicly-visible status reversal; can be *initiated*, never delivered, in a promo. +2. **What is Karl's unknown class actually capable of?** — pays off incrementally (skill books ~ep 55–57; second/third beast ~ep 81–84). The open question of a class with no recorded ceiling. +3. **Karl & Dana — unspoken, watched from above.** — slow-burn through proximity (study on the balcony, held hands in a dark maze); the Board frets over it. Material, social-friendly. Never resolve the romance. +4. **Dana is being slotted into an entertainer/"messaging" career she didn't choose.** — surfaces ~ep 27, named by the Board ~ep 61. Real institutional assignment ("abbreviated career as an entertainer, followed by... messaging" — Ep 61). A genuine injustice thread — but a *Dana* thread that enters mid-run; tease only. +5. **Can the power kill him?** — pays off ~ep 81–83 (bonding two beasts at once withers him to skeletal; IV drips, Commander-rank healing food, "I would most likely be dead"). The cost reveal; high-stakes tease. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Karl bond a beast for free.** Each beast needs its own Beast Space; bonding beyond his readiness siphons his own body. A promo can't imply casual collect-'em-all power-ups. +- **The show never lets Karl will a beast into existence.** He can only bond an infant/egg he physically obtains; he tries for a dragon and gets nothing (Ep 3). +- **Beasts never become interchangeable combat tools.** They are dependents with personalities and appetites; Karl's care (feeding, building their spaces) is how he expresses love. +- **The growth never comes purely from fighting.** Raw power scales from feeding/meditation feedback through the beasts; physical training only sharpens skill. A "got buff by brawling" arc misrepresents the class. +- **The elite world never has ancient depth.** Serum, ranks and Academy are modern, improvised, casualty-averse. Don't write timeless lineages. + +--- + +# LAYER 3 → companion: `world_flbm_deep.md` · *on demand only* + +> Full cast, full mechanics, beast ability sets, world/ecology, relationship map, flavor, and the proven-promo failure record. Pulled only on a canon question, a W2 break check, or a W5 deep dive. + +--- + +**Cross-show contamination:** checked against the `series_worlds.md` index. FLBM and **WBT** are both beast/academy underdog shows — keep them strictly distinct: FLBM's lead is **Karl** (mining-town kid, three-claw Beast Master, builds Beast Spaces, bonds a Windspeed **Hawk**), NOT WBT's Ren / spore / mushrooms. Otherwise clean. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_flbm_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_flbm_deep.md new file mode 100644 index 0000000..c4bb7ab --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_flbm_deep.md @@ -0,0 +1,93 @@ +# FLBM — First Legendary Beast Master — Layer 3 Deep Reference + +> Companion to `world_flbm.md`. On-demand only (canon question, W2 break check, W5 deep dive). Reference-formatted; not in the default build path. Source verified through ch 100. +> **L3 note:** the working doc carries everything a cold-traffic promo needs; this file is the canon backstop, not a build input. + +--- + +## Cast — full + +| Character | Role | Entry | Anchor-safe? | Key detail (source) | +|-----------|------|-------|--------------|---------------------| +| **Karl** | Protagonist | Ep 1 | Yes | Three-claw Beast Master, mining-town kid, no last name; bonds egg/infant monsters into separate mental Beast Spaces; inherits their skills at reduced power; grows as they grow. | +| **Hawk (Windspeed Hawk)** | First beast / partner | Ep 3–4 | Yes | Hatched from a kitchen egg; skills Rend, Super Vision, later Wind Shield (Ep 20) and Shred (Ep 56, red feather streaks). Food-obsessed, ego, grudge vs. water mages; calls Rita "evil lady" → "not so evil lady." Grew giant via injection mutation (Ep 70, >1m tall, ~3m wingspan). | +| **Dana** | Primary ally / slow-burn | Ep 8 | Yes | Dark-haired mage; first through the field with Karl. Spells: Magic Missile, Fog Bank, later Golem (Ep 57). Hawk teaches her mana control. Slotted into forced dance + cosmetology / entertainer track (first stated Ep 27). Studies on Karl's balcony; bonds with Rae. | +| **Sergeant Rita** | Personal tutor / anchor | Ep 11 | Yes | Ascended-rank warrior, early 20s, strong martial artist (not a genius mage); assigned because Karl's class is unknown; genuinely invested; later resents Bureau overriding her. | +| **Tank / unarmed instructor** | Combat instructor | Ep 19 | Yes | Older martial-arts expert (late 40s, not an elite); puts Karl in the mixed-martial-arts / brawler group for monster fighting. (Note: "Tank/Berserker" framing in old doc is thin — source shows an aging MMA instructor.) | +| **Colonel Valerie Boris** | Bureau of Elite Development lead | ~Ep 61 | No — mid-run | Starched uniform; "almost smiled" running gag; called Karl's future a "test subject" path. | +| **Alice** | BED mage / observer | ~Ep 60 | No | Administers the injection/pill regimen (Hawk's giant growth; Karl's near-death bonding); raises training barriers. | +| **Daniel** | BED warrior / observer | ~Ep 60 | No | Led the southern monster-bonding trip; cut Karl's hair / taught him to shave post-growth (Ep 71). | +| **Jodi & Anise** | BED field agents | ~Ep 79+ | No | Drove the southern truck; Jodi panicked at the spider egg. | +| **Prince Axel** | Benefactor / world-expansion | ~Ep 55 | No | Inscriptionist royal; gave Dana the Golem tome; same class mark as Dana. | +| **Overlord Drake** | Benefactor / power ceiling | ~Ep 55 | No | One of the strongest elites; gave Karl the Shred tome; "confidence is key to strength." | +| **Thor (Lightning Cerro)** | Second beast / tank | ~Ep 83 | No — late | Named himself after the god of thunder; skill Refreshing Lightning (damage barrier + healing aura, self-only). Placid, food-driven, loves charging barriers. | +| **Rae (Bloodbath Spider)** | Third beast / stealth | ~Ep 84 | No — late | Invasive near-extinct species; named herself "Rae, short for Arachne" (Ep 86). Self-intro: *"I am the bringer of death... the shadow that stalks the night."* Skill Offensive Adaptation; spins functional silk; thermal/echolocation sight; bonds with Dana (Ep 89). | +| **Jasmine** | Mining-town classmate | Ep 10 | Situational | Dramatically changed by the injection (blonde, thinner); beaten by boars day one. | +| **Molly (fmr. Gertrude Dingwall)** | Mage classmate | Ep 18 | Situational | Changed her name on the train ID; trains alongside Karl. | +| **James, Kruger** | First-day team | Ep 8 | Situational | Swordsman (defensive skill) and axeman (super strength); chose the large dorm rooms. | +| **The Headmaster** | Academy authority | Ep 16 (ref) | Situational | Overlord-grade mage, first injected batch; personally makes Wind Stones; supplied the Shred tome. | +| **Train Cook / Train Guard** | Exposition | Ep 3–4 | Situational | Wand-class fire mage (never past level 1) explains the ranking system; bear-paw Druid advises animal/unarmed skills, awakened by touching trees. | +| **Jill** | Dana's BED tutor | ~Ep 89 | No | Pulls Dana's magic ahead of the entertainer track; wrapped in Rae's silk. | + +--- + +## World mechanics — full + +**Divine Serum / Awakening.** Mana Awakening ("Divine") Serum given to all graduating ~14-year-olds; ~5% compatible. ~1-in-100 fatal reaction; painful even when it works. Reverse-engineered over decades from a broken ancient **System Stone** found under an ancient Sanctorum. Compatible recipients get a class marking (ice/fire/blades/shields/paws/bows/wands documented; Karl's three claws are not). Powers activate only on first skill use. + +**Ranking scale (elites & beasts, by what you can defeat):** Common → Awakened → Ascended → Commander → Royal → Monarch → Overlord (Mythical referenced). Internal measures differ by class (mages = mana, druids = mortal grades, warriors = physique). Most students reach Awakened by end of year one; geniuses near Ascended. + +**Academy badges (worn on the jacket — the show's visible-status engine):** White = Common, Black = Awakened, Bronze = Ascended. + +**Karl's Beast Master class.** +- *Beast Space:* a mental dimension, initially empty darkness; Karl builds terrain by meditation; size/quality scale with energy invested; it sustains the beast's life and growth. +- *Bonding:* only infant/egg-stage monsters, by moving them into an empty space; bond forms on hatch + feeding. **Each beast needs its own space** — they can't be shared. +- *Cost:* bonding when unprepared siphons energy from Karl's body. Bonding Thor + Rae too close together (Ep 81–83) nearly killed him — withered to skeletal, IV drips, Commander-rank healing food; minimum requirement learned: one separate space with ≥ the creature's stored energy. +- *Skill inheritance:* Karl gains the beast's innate skills at reduced effectiveness (can't modify physical weapons, only the energy form). Hawk → Super Vision, Rend, Wind Shield, Shred; Thor → Refreshing Lightning; Rae → Offensive Adaptation; Slash insight (Ep 70) = an energy-efficient stripped-down Rend. +- *Physical feedback:* as a beast grows, Karl's physique strengthens proportionally — the **primary** power-scaling mechanism (training only sharpens skill). +- *Food storage:* the space stores food indefinitely (an infinite cooler); rejects non-food. +- *Communication:* telepathic link with all bonded beasts (concepts Karl translates); beasts develop vocabulary over time. +- *Count by ch 100:* three (Hawk most developed, Thor functional, Rae minimal-but-fast). A space splits off a new one when the first reaches quality + surplus energy (Ep 70). + +**Beast biology.** Beasts strengthen by eating higher-rank food/resources (mana-infused monster blood, strength stones, Wind Stones for air affinity, skill-insight foods, restricted Dragonite pills). Skills beyond species norm cause visible mutations (Hawk's red streaks; his abnormal size). Natural plateau set by prey grade (Windspeed Hawks cap low-Awakened on Common mice) unless resource-boosted. + +**Academy structure.** Isolated, one road in/out beside the rail; ring of grassland/forest/swamp crossed on arrival. Dimensionally-expanded magical dorms (balconies/halls larger than physics allows; staircases reaching only your floor); first-come room choice. Three cafeterias (mage / warrior / dorm), 4 AM–midnight, all magical-beast meat and enhanced produce. Daily loop: morning skill drills, afternoon martial arts, Saturday team practical (transported to realistic environments), plus tutor sessions and credit-earning field missions. + +**Karl's balcony greenhouse** (inherited from the "kitchen witch"): Mountain Gooseberries (monster bait / Hawk's seasoning, weak mana), Honey Berries (bear bait / sabotage), Clear Mind Fruit (limited-use exam aid), catnip (bribe security cats), plus teas, pears, etc. Self-watering by magic; soundproofed. Emotional home base (meditation, Dana's study, Rae's hammock). + +**Broader world.** The Golden Dragon Nation (founded by the mythical Immortal Golden Dragon; coal/lithium mines, cities, frontier). Rivals: the Ocean People (water magic), other nations, the Beast Lands. The Church (High Priests/Priestesses, holy/healing magic) predates the Serum and runs Seminary academies. Modern tech (cars, helicopters, computers, phones — but Karl's family can't afford one; armored vehicles, flamethrower turrets). Elites live on stipends scaled to power; **Idols** (singer/actor/influencer elites) are the public face — the track Dana is being pushed toward. + +**Bureau of Elite Development.** Government agency (under the National Security Agency); guides promising elites, can override Academy plans. Operates in pairs. Runs Karl (test subject) and Dana (entertainer→messaging) per the **Academy Board**, which plans careers from semester one, debates the Karl–Dana relationship, and weighs using Dana as leverage on Karl. Thesis line (Ep 12): without power he'd "just be at the bottom of a much fancier pile" — the system sorts by power everywhere; the Academy is a shinier mine. + +**Inscription tech.** Some elites inscribe skill books that teach an ability on contact and vanish when a compatible reader uses them (Ep 56). Needs an original/mastered template; only a handful exist (Rend, Shred, Golem focus). + +--- + +## Relationship map (ch 100) +- **Karl ↔ Hawk:** firstborn bond; constant thoughts; Hawk runs food policy, Karl runs everything else; Hawk taught Dana mana control. +- **Karl ↔ Thor:** paternal; a trusting baby who named himself after a god and loves charging barriers. +- **Karl ↔ Rae:** mutual respect; proud, poetic, intelligent; obeys in combat, socializes toward Dana. +- **Karl ↔ Dana:** unspoken slow-burn via proximity (balcony study, dark-maze hand-hold); the Board watches. +- **Karl ↔ Rita:** student–tutor with real mutual respect; she resents the Bureau but never on Karl. +- **Karl ↔ Valerie:** handler/asset, professional and cool ("test subject"; "almost smiled"). +- **Dana ↔ Hawk / Dana ↔ Rae:** Hawk mentored her; Rae bonded instantly, builds a hammock over her study spot. +- **Beasts ↔ each other:** hear each other through Karl; Hawk is senior, Rae the smartest (lets them think otherwise), Thor follows. + +--- + +## Proven-promo failure record (load before any FLBM W1/W5) +- **Juno** ($3.50 CPI, 22.50% CTI): Bond engine built on an **entirely fabricated** wolf pup, Emperor, and Alpha Bond — none in source. Strong top-funnel, fidelity failure downstream killed it. *Lesson: never invent a beast.* +- **Boneclaw/Thor** ($3.30 CPI, 26.29% CTI): Thor is real but enters ~ep 83; the install promise can't survive ~80 chapters of Karl+Hawk first. Entry-window violation. *Lesson: the safe core is Karl + Hawk at the Academy; Thor/Rae are sequels to the hook, not the hook.* + +--- + +## Cross-show contamination guard +FLBM and **WBT** are both beast/academy underdog shows. Keep distinct: +- FLBM = **Karl**, mining-town kid, three-claw **Beast Master**, builds mental **Beast Spaces**, bonds a Windspeed **Hawk** (then Thor/Rae). Beasts are real, fight, evolve, have personalities. +- WBT = Ren, spore/**mushrooms** (cosmetic, never a combat power per WBT canon). +Never transplant WBT's mushroom/spore framing onto Karl, and never give Karl a fabricated or WBT-style beast. + +## Source corrections logged vs. the prior world doc +1. **Dana's entertainer/idol track is REAL, not a fabrication** — but it enters ~ep 27 (dance + cosmetology) and is named by the Board ~ep 61, NOT in eps 1–20. Removed from HARD BLOCKS (it isn't opening-binding and isn't show-breaking); demoted to a tease-only Layer 2a thread + entry-map item. The prior "[UNVERIFIED]" HARD BLOCK overcorrected. +2. **"Tank" the Berserker** (old doc, Ep 15, 2.25m, Unstoppable/Rage) is not what the source shows — the Ep 19 unarmed instructor is an older non-elite MMA expert. Framing softened; treat "Tank" as unverified. +3. **Voice-sample ep numbers** corrected to source: the "park ranger" line is Ep 3 (not Ep 4); the "Alright, buddy" line is Ep 10 (not Ep 9). diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ftp.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ftp.md new file mode 100644 index 0000000..339efb0 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ftp.md @@ -0,0 +1,119 @@ +# FTP — Forged Through Pain — Series Worlds Entry + +> **Opening anchor:** first 5 min (the cellar tally / Perrin's verification) / first 5 eps (House Lowell enslavement → Godforge awakening) / first 20 eps (secret refinement via beatings, Family Training Day). **Source verified through:** ep 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_ftp_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 from a close read of eps 1–20; Layer 2 + canon limits sampled across eps 20–100. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) + canon gate (limits). Layer 3 is on demand. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **Heir-to-Slave Reversal Promise** *(Thruline)* — the Young Master made a human punching bag who turns the abuse into power. +2. **Family-Betrayal Class Hierarchy** — Great Houses, branches, and Sect ranks where the strong own the weak. +3. **The Secret Weapon-Body (Godforge)** — getting beaten makes him stronger; no one knows why. + +## Protagonist — Zane Lowell +**Identity.** Former Young Master of House Lowell — a fourteen-year-old generational prodigy (peak Strength Level) until his father Milo was poisoned by his brothers and the surviving branches framed the family as traitors. For two years he's been a shackled slave, the "human punching bag" for the Lowell children who once bowed to him. Engine is **Underdog Awakening**: the night he burns the Codex of Ascension, a hidden gold script grants the **Godforge Technique** — every blow that should break him forges him stronger. His sister Elara, imprisoned on Infernal Peak, drives every choice. +**Combat.** His body IS the weapon. Skin deflects blades, bones denser than steel; ordinary attacks can't hurt him and instead purge impurities and advance his cultivation. He fights with the Purple Flash Fist (Shadow Fist — one strike, multiple internal ruptures) on precise vital points, and must constantly **fake injury** so no one learns the truth. +**Power Source.** Godforge: "Transform flesh into forge, body into weapon. Purify the vessel through suffering" (Ep 4). Being beaten = taking an Aether Crystal; impurities flush a thousand times faster than normal cultivation. Hard limit: it scales with the *force* hitting him — once his body outgrows an attacker, weak blows do nothing; he needs stronger opponents to advance. Ladder: Skin → Strength → Bone Refining → Core Strength → Marrow Refining, then the Nature Level. +**Voice.** Cold, patient, internally narrated; rage that "froze" rather than flared. Wry and sardonic — savors beatings while pretending to suffer. Highborn dignity even in shackles. Vengeance-driven but principled: invokes "the rules" against those who abuse them. + +**Voice Samples (verbatim — never paraphrase):** +1. "Repaying cruelty with kindness... Such nobility delivered my father to his grave." (Ep 1) — bitter, disillusioned +2. "My fist is stronger than yours, so I'm above you... Respect the person, not the position." (Ep 8) — code, defiant +3. "I ate it." (Ep 25) — deadpan, on the Hellfire Blade +4. "Let him come. I need the practice." (Ep 9) — cold, on Andrew's revenge +5. "Just let me die!" (Ep 4) — internal, mid-forging agony + +**Drift tripwires.** Visibly wins through brute strength | shows his body's secret to anyone | is seriously harmed by ordinary attacks | rescues Elara | becomes a confident swaggering hero | loses the fake-injury concealment | resolves the dagger / furnace / ring secrets. + +## Setting — Entry-Window World (House Lowell, Castermere County) +**Feel.** A damp cellar where a former heir scratches tallies counting the days since his father's murder. Above it: the marble-and-basalt Lowell Training Hall, an open-air arena where ten-year-olds in gray robes beat shackled, leather-armored slaves as "live targets" — many maimed or killed. A decaying Great House: rich, comfortable, rotting from within, its two stolen Aether Crystals and lost Greenwind Blade the markers of a glory it betrayed. + +**Sensory Samples (verbatim):** +1. "Zane Lowell etched another tally into the damp cellar wall—seven hundred and thirty days since his father's assassination." (Ep 1) +2. "The hall quickly filled with the sickening thud of fists on flesh and the pathetic whimpers of men begging for mercy. To the Lowell kids, these slaves weren't people; they were objects." (Ep 1) +3. "Cracks began to spiderweb across his skin, a dark red light glowing from within, like he was a piece of red-hot iron." (Ep 4) + +**Drift tripwires.** Lowell estate as warm/noble | beatings as sport rather than lethal injustice | slavery softened | the Capital/Sect anchoring the opening (that's the second phase). + +## Tone Constraint +Underdog *injustice-into-power* drama, not a flex. The beatings must read as a child tortured by his own family — the strengthening is Zane's secret, hidden under faked agony. If a beat lets him visibly dominate or openly reveal his power, empathy collapses into power fantasy. + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +Zane tallies 730 days since his father's assassination, planning vengeance. Hauled in shackles to the Training Hall, he's shoved into the slave line — leather-armored "punching bags" for Lowell children. His cousin Perrin, the new Young Master, arrives flaunting a stolen Aether Crystal ("that was just from one-tenth of its power"), kills a begging slave with one punch, then twists the knife: "I heard our dear cousin, Elara... Got herself sent to Infernal Peak." The family's former pride, now property, learning his sister is condemned — and unable to do a thing. + +## First 5 episodes *(the first sitting)* +In despair, Zane burns the Codex of Ascension — and a hidden gold script erupts from the ashes into his flesh: the **Godforge Technique**. A nine-dragon furnace and black flame forge his soul and body in agony. Next day, Melvin's brutal punch produces not pain but *warmth* — impurities purging, cultivation surging. Zane realizes: **being beaten makes him stronger.** He volunteers for beatings, fakes injury to hide it, and rockets from peak Strength to Bone Refining in days. + +## First 20 episodes *(texture band)* +Zane secretly trains the Purple Flash Fist (Shadow Fist) at night; thrashes the stewards Grey Hawn and Darren for breaking House rules; the elders (uncle Owen, who poisoned Milo) plot his death. On Family Training Day, his cousin Andrew — wielding the second stolen Aether Crystal — calls him to a Fatal Duel and unleashes a lethal Talisman weapon; Zane survives untouched and ends Andrew with "One Punch" (Ep 16), crippling his cultivation. The arc builds toward escaping House Lowell to reach the Skyreach Sect and save Elara. + +## HARD BLOCKS *(opening-binding)* +1. **Zane's body IS a weapon (Godforge Technique) — literal, not metaphor.** Skin deflects blades, bones denser than steel; he gets STRONGER by being beaten (each blow purges impurities). Never show him seriously harmed by ordinary attacks. +2. **The Godforge Technique is absolutely secret.** No one knows his body is a mystical weapon. Observers note a "bizarre physique" / impossible toughness but have no explanation; Zane must fake injury to conceal it. +3. **The Cobalt Dragon / nine-dragon Furnace / Dragon Scale system is secret.** Black flame, the furnace forging his soul, Celestial Essence production — none of it is known to anyone. +4. **The Shattered Dagger's true nature is unknown.** Appears worthless/battered but "could slice through anything"; found in Evil Jace's Storage Ring. Do not resolve the dagger's nature. +5. **Elara is NOT rescued by Ep 100.** Imprisoned on Infernal Peak; Zane has NOT freed her. The rescue is his driving goal but is NOT accomplished. +6. **Zane's father Milo is confirmed dead** (poisoned by his brothers — Owen's role explicit). Not a mystery. The Greenwind Blade (Milo's legendary sword) is missing/hidden, not recovered. +7. **The Codex of Ascension is destroyed.** The gold script was a one-time event, absorbed into Zane. Cannot recur. +8. **The Storage Ring is secret.** Legendarily rare (pocket dimension); Zane uses it discreetly. + +## Entry map *(tease ok, anchor flags)* +- **Godforge awakening** — ~ep 3–4 (burning the Codex); opening *may* anchor here. +- **Family Training Day / Andrew "One Punch"** — ~ep 13–16. +- **Evil Jace, the Forge, Storage Ring + Shattered Dagger** — ~ep 19–27 (origin climax → freedom). +- **The Capital / Skyreach Sect entrance** — ~ep 28 (Ethan, Legacy Houses, Points). **Phase shift.** +- **Misty Peak / Isla Novak, Sect Points economy** — ~ep 39–50. +- **Infernal Peak / Elara glimpsed, Adrian, power-gap reckoning** — ~ep 40–88. +- **Celestial Essence reveal (his Black Fire makes it)** — ~ep 99–100. + +## Engines the opening supports +1. **Underdog Awakening (UNTESTED — STRONGEST):** enslaved former heir who gets stronger from being beaten; every win looks impossible from outside. +2. **Secret Power (UNTESTED — VERY STRONG):** five stacked secrets (weapon-body, furnace, dagger, ring, soul-forge) no one can see; concealment-vs-power is the loop. +3. **Institutional Injustice (UNTESTED — VERY STRONG):** Great Houses monopolize crystals, blades, Sect access; class hierarchy at every level. +4. **Bond / Family Loyalty (UNTESTED — STRONG):** Elara on Infernal Peak drives every decision; never reached. + +## IM sources — opening window +- **Perrin flaunts the stolen Aether Crystal that should have been Zane's** (Ep 2): birthright theft. *Institutional Injustice, T2* +- **Perrin kills a begging slave with one punch** (Ep 2): casual murder of the powerless. *Status Destruction, T2* +- **"Elara... sent to Infernal Peak"** (Ep 2): sister condemned, Zane helpless. *Family Threat, T1* +- **Children torture the former heir who once bowed to them** (Ep 1): the core humiliation. *Public Humiliation, T1* +- **Owen poisoned Milo, framed the family, enslaved the son** (Ep 1–2): the founding betrayal. *Family Betrayal, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** a generational-prodigy heir was made his own family's human punching bag after his father was murdered and framed by his uncles — beaten daily by the children who once groveled at his feet, while his sister rots on Infernal Peak. +- **T2 (supporting):** his stolen birthright (the Aether Crystal) now powers the talentless cousin who lords it over him; slaves are killed for sport. +- **T3 (deepening):** even servants and stewards (Grey, Darren) now bully and try to trade away the former Young Master; the House that betrayed his father grows fat on the theft. +- **Drift risk:** if a promo leads with the cool weapon-body / "gets stronger from beatings" gimmick and skips the family murder + daily humiliation + Elara, it reads as a flex, not an injustice, and empathy collapses. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **Rescue Elara from Infernal Peak** — driving goal from Ep 2; still unaccomplished at Ep 100. Sell the vow and the closing distance; never deliver the reunion (she's glimpsed, never freed). +2. **Avenge Milo / reclaim House Lowell** — the uncles (Owen) murdered his father and stole the Crystals + Greenwind Blade. Initiate the reckoning; the full purge is unresolved. +3. **The Shattered Dagger's hidden power** — a battered knife from Jace's ring that "could slice through anything." Tease its mystery; never explain it. +4. **Lighting the Dragon Scales / the Furnace's ceiling** — one Legendary weapon barely lights a single Cobalt Dragon scale; thousands remain across nine dragons. Sell the vastness of the climb, never the summit. +5. **Celestial Essence — his Black Fire secretly makes the rarest substance in the Empire** — Great Houses bid fortunes for a trace (Ep 99–100); Zane produces it as a byproduct. Tease the implication; withhold what it means for him. + +## 2b · Canon Limits / Never-Happens +- **The show never lets an ordinary attack seriously hurt Zane** — blows forge him; pain is faked for cover. +- **The show never reveals the Godforge/furnace/dagger/ring secrets to other characters** — observers only ever sense a "bizarre physique" with no explanation. +- **The show never frees Elara** — Infernal Peak is the unreached destination through Ep 100. +- **The show never resolves the dagger or the Greenwind Blade** — both stay open. +- **Cultivation is body-refining, not spellcasting** — power is forged flesh, vital-point strikes, and martial forms (Purple Flash / Shadow Fist), not magic. + +--- + +# LAYER 3 → companion: `world_ftp_deep.md` · *on demand only* + +**Cross-show contamination:** checked against the `series_worlds.md` index — clean. FTP is the only enslaved-heir / weapon-body / "stronger from beatings" cultivation show; keep Zane's Godforge distinct from any other Secret-Power protagonist. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ftp_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ftp_deep.md new file mode 100644 index 0000000..5afad34 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ftp_deep.md @@ -0,0 +1,102 @@ +# FTP — Forged Through Pain — Layer 3 Deep Companion + +> On-demand Layer 3 only. Not in the default build path — pulled for canon questions, W2/W3 canon-break checks, or a W5 deep dive. All facts trace to the eps 1–100 source. Reference-formatted; scan, don't read. + +--- + +## Full Cast + +### Core +| Character | Role | Key detail (source) | +|---|---|---| +| **Zane Lowell** | Protagonist | Former Young Master of House Lowell; at 14 a generational prodigy at peak Strength Level, praised by the king of Castermere County. After Milo's murder + the family frame, enslaved 2 years as a "human punching bag." Burns the Codex of Ascension → gains the **Godforge Technique** (ep 3–4): body becomes a weapon, beatings forge him. Rockets Bone Refining → Core Strength → toward Nature Level. By ep 100: free of House Lowell, an Outer-track Skyreach disciple on Misty Peak, holds Jace's Storage Ring (+ Shattered Dagger), secretly produces Celestial Essence, ~40k Crystal Cubes cleared — still has NOT reached or freed Elara. | +| **Elara Lowell** | Sister / driving goal | Prodigy; chosen by Skyreach Sect at 13 — the only reason she escaped the family coup. Now imprisoned on **Infernal Peak** as punishment ("pissed off someone important"). Doesn't know her father is dead (ep 40). House Warrick's Caleb is pressuring her (via Perrin's letters) to marry his brother. **Never freed through ep 100.** | +| **Milo Lowell** (deceased) | Father | Head of House Lowell; poisoned by his own brothers (Owen's role explicit) 2 years before ep 1, then framed as a rebel. Wielded the legendary **Greenwind Blade** (also called his Cerulean Blade) — peerless in the county, hidden in a secret location, now missing. | +| **Perrin Lowell** | Primary cousin-rival | Same age as Zane; the new Young Master after Zane's fall. Painfully ordinary (barely Strength Level at 16) until he **stole one of the family's two Aether Crystals** → leapt to Bone Refining and became a Skyreach **Core Apprentice** via Caleb's favor. Cruel, smug; kills a slave to show off (ep 2). Delivers the Elara news. | +| **Andrew Lowell** | Cousin-rival (origin) | Owen's eldest son; arrogant second young master. Took the **second** Aether Crystal. Plots Zane's death on Family Training Day; in the Fatal Duel he uses a one-shot Talisman weapon (Stormbreaker/Storm Pike), misses, and Zane ends him with "One Punch" (ep 16) — seven vital-point strikes that cripple his cultivation forever. | +| **Owen Lowell** | Arch-betrayer / uncle | Milo's brother; used "deceit and poison to murder his own brother." Core Strength Level master ("three Ancient Cauldrons" of power). Runs House Lowell post-coup; suspects Zane has a secret body-refining technique (greedy to claim it). | +| **Evil Jace** | Origin-climax antagonist | "The Man Who Ate the Blade" arc; a rogue Master Weaponsmith halfway to the Nature Level. Captures Zane, tries to forge his body in the kiln for 20+ hours; Zane absorbs the Hellfire Blade ("I ate it"), survives, and kills him (~ep 25). His **Storage Ring** (with the Shattered Dagger + ores + Crystal Cubes) becomes Zane's. | +| **Ethan Grant** | First Sect ally | Met at the Skyreach entrance (ep 29); minor Capital family. Explains the Sect (Outer Disciples in White Robes, Core Apprentices in Shadow Cloaks, Points economy). Loyal, awed by Zane; defends him publicly (ep 42). | +| **Isla Novak** | Sect mentor | Master of **Misty Peak** (ranked last of the Sect's 33 peaks); imperious, well-connected, bends rules to recruit talent. Manipulates Zane's Student ID to recruit him quietly; gifts him the paired recall-rings for the Shattered Dagger (ep 50). | +| **Caleb Warrick** | Sect arch-rival | Leader of the black-robed Core Apprentices; House Warrick (a Legacy House). Cold, treats lives as commodities; orders Zane killed pre-disciple (ep 29), later demands he quit The Gauntlet or jump off Blackwater Bridge. His brother wants to marry Elara. | +| **Adrian** | Infernal Peak power-gap antagonist | The opponent on/near Infernal Peak (~ep 88) whose skill so outclasses Zane that it reframes his whole plan — he resolves to master Weapon Forging, not just get stronger, to ever reach Elara. | + +### Secondary / Situational +| Character | Notes | +|---|---| +| **Darren (Fane)** | House Lowell steward; skims Zane's Vita Shards, tries to sell him off as Grey's servant. Beaten/humiliated by Zane (ep 8); a coward who later schemes from the shadows. | +| **Grey Hawn** | Senior steward; ex-servant who climbed via uncle Andrew (his wife was Andrew's nanny). Arrogant; Zane slaps him bloody for breaking House rules (ep 8); begs Andrew for revenge → the Family Training Day plot. | +| **Melvin Lowell** | Mediocre Lowell kid (Skin Refining) with freakish innate strength; the first to "forge" Zane unknowingly (ep 5–6). Becomes quietly friendly — shares food, warns Zane about Andrew. | +| **Master Corrin** | Sadistic Training Hall trainer; whip "said to peel skin from bone." Runs the daily slave-beating drills. | +| **Nolan Lowell** | Uncle; "half a step into the Nature Level"; tries to face Jace (ep 19) but is outclassed. | +| **Connor (House Sterling)** | Sharp youngest son of House Sterling; rings a roadblock against Zane during the entrance trials; Zane grabs him by the throat (ep 43–44). | +| **Joe** | A Gauntlet/Bloody Mountain rival with the most "potential" by the masters' eyes; his dagger + filaments fail to cut Zane (ep 46) — a public near-exposure of the weapon-body. | +| **Wyatt / Master Jasper / silver-eyebrowed elder** | Skyreach examiners/masters during the Bloody Mountain trials and Point-penalty rulings. | +| **Hawkins & Sutton elders** | Of two of the Seven Great Houses; bid fortunes against each other for Celestial Essence at the Capital auction (ep 99–100). | + +--- + +## World Mechanics + +### The Godforge Technique (HARD-BLOCK core — absolutely secret) +- Granted by the hidden **gold script** inside the Codex of Ascension (one-time, ep 3): "Godforge Technique. The Original Method of Forging. Transform flesh into forge, body into weapon. Purify the vessel through suffering, cleanse it for the awakening of true vitality" (ep 4). +- **Body becomes a literal mystical weapon.** Magical weapons have five stages: Mysterious → Spirit → Mystic → Sacred Arms → Divine Arms (each top/middle/lower grade). Zane's body forges up from "lower-grade Mysterious Weapon." Skin deflects blades (Jace's Hellfire Blade only scratches, ep 25); bones harden past steel; he can't be moved or seriously hurt by ordinary force. +- **Being beaten = taking an Aether Crystal.** Each blow produces *warmth* that purges impurities and advances cultivation ~1,000× faster than normal training. **Hard limit:** the effect scales with the *force* of the blow — once his durability outgrows an attacker, weak hits produce nothing; he needs progressively stronger opponents (or the kiln) to keep advancing. +- **Concealment is mandatory.** Zane must fake injury after every hit. Observers (Owen, Jace, Joe, the masters) only ever register an impossible toughness / "bizarre physique" they cannot explain. + +### The nine-dragon Furnace / Cobalt Dragon / Dragon Scale system (secret) +- Awakened during the forging vision: a colossal blast furnace ("The Great Forge" / Ancient Cauldron) wreathed by **nine dragons** of different colors (cyan/Cobalt, black, white, purple, Storm Drakes…). Eight sleep; only the **Cobalt Dragon** at the bottom is awake. +- A **black flame** (Black Fire / Dragon's Breath Forge) lives in his Mindscape. It forges his *soul* in repeating cycles of agony ("Burned to slag, hammered flat, then reforged"). It also **consumes mystical weapons** — it dissolved the Hellfire Blade instantly and fed the molten droplets to the Cobalt Dragon, lighting a single **Dragon Scale** (Azure/Cobalt scales number ~10,000 on that one dragon alone). +- **Ceiling tease:** lighting every scale across all nine dragons is near-unimaginable — "even if I melted down every treasure in the entire Eastern Territory, it would barely be enough to activate the Cobalt Dragon." None of this is known to anyone. +- **Celestial Essence:** the Black Fire's byproduct when it melts a mystical weapon is the *same* silver-droplet substance the Capital's Great Houses bid 25,000+ Crystal Cubes for (ep 99–100) — "the fundamental component of all legendary arms," a spark of Cosmic Order no one knows how to extract. Zane makes it accidentally. Implication unresolved. + +### Cultivation ranks (body-refining, not magic) +- **Skin Refining → Strength → Bone Refining → Core Strength → Marrow Refining**, then the **Nature Level** (command of Life Energy itself). Impurities purge outside-in: skin → flesh → bones (pale-white residue) → organs → spinal marrow. +- Milestones: ~1,000 lb single-hand force = "Immense Power," the mark of a true warrior. Reaching Bone Refining before 30 = a prodigy; before 16 = generational (no one in Castermere County had done it in 300 years — hence the untouched Aether Crystals). +- **Aether Crystals:** House Lowell's two sacred heirlooms; one crystal at one-tenth power jumps a user a full stage. Perrin and Andrew each stole one. + +### The Skyreach Sect (primary arena, eps 28+) +- Occupies ~a quarter of The Capital; **33 peaks** (Misty Peak ranked last; Eagle Peak, Misty Peak named). Ruled by peak masters. +- **Disciple ranks:** applicants → pledges → **Outer Disciples** (White Robes) → **Core Apprentices** (Shadow Cloaks, more status/resources). Legacy/Great Houses (a "Legacy Charter") skip the entrance exam; everyone else faces the **Entrance Exam → Academy Trials (The Gauntlet / Bloody Mountain)**. +- **Points** = the Sect's lifeblood currency (training grounds, manuals, resources). Earned by missions or bought (~2 Crystal Cubes per Point after inflation). Penalties are brutal (1,000-Point deductions can derail a career). +- **Crystal Cubes** = the elite currency Empire-wide (stored Life Energy), used by Nature-Level masters; ordinary people use gold/silver. + +### Castermere County / House Lowell (origin, eps 1–27) +- House Lowell rules Castermere County but ranks low in the Eastern Territory; once the county's strongest family, now fallen from the top three after Milo's death. Twelve branches remain (Zane's was the thirteenth, destroyed). +- The **Greenwind Blade** (Milo's, missing) was the county's only Legendary Weapon. The estate: Training Hall, Council Hall, Forge, Community Garden, new pavilions/ponds the comfortable uncles built — a House rotting from prosperity. +- Signature art: **Purple Flash Fist** (Ultraviolet Power; nearly a lost art). Its pinnacle is the **Shadow Fist** — one punch, multiple internal injuries; mastery measured by the number of impacts (Milo could land 8 at Bone Refining; Zane reaches 7). + +--- + +## IM sources by arc (type · tier) +- **Origin hook (Ep 1–3):** tally of 730 days since Milo's assassination *(Family Betrayal T1)* · children beat the former heir as a "live target" *(Public Humiliation T1)* · Perrin flaunts the stolen Aether Crystal + kills a begging slave *(Institutional Injustice / Status Destruction T2)* · "Elara… sent to Infernal Peak" *(Family Threat T1)* · steward skims his medicine, tries to trade him as a servant *(Degradation T2)*. +- **Awakening (Ep 3–6):** burns the Codex, gold script forges him *(Power Awakening T1)* · the nine-dragon furnace + black-flame soul-forge agony *(Ordeal T1)* · "being beaten makes me stronger," faking injury *(Secret Power T1)*. +- **Defiance (Ep 7–16):** thrashes Grey & Darren "Respect the person, not the position" *(Justice-Reversal T2)* · Family Training Day Fatal Duel — slaves fight for freedom or die *(Institutional Injustice T1)* · Andrew's lethal Talisman + "One Punch" crippling *(Underdog Triumph T1)*. +- **Freedom (Ep 19–27):** Evil Jace's kiln, 20 hours of fire, "I ate it" *(Survival / Defiance T1)* · kills Jace, claims the Storage Ring + Shattered Dagger *(Discovery T1)* · walks free after 2 years *(Liberation T2)*. +- **Capital / Sect (Ep 28–46):** the Sky Arch / Ogre's dowry gate makes everyone "feel poor" *(Class spectacle T2)* · Caleb orders him killed pre-disciple *(Institutional Injustice T1)* · Bloody Mountain / The Gauntlet, Joe's dagger fails to cut him *(Near-Exposure T2)* · Isla recruits him to last-ranked Misty Peak *(Unlikely Mentorship T2)*. +- **Sect deepening (Ep 47–100):** Ogre / Second Heart / Razorwing trials *(Survival T2)* · the Shattered Dagger's recall-rings *(Mystery T2)* · Infernal Peak power-gap vs Adrian reframes the plan *(Humbling T1)* · Celestial Essence auction — his Black Fire secretly makes the Empire's rarest substance *(Secret-Power / Discovery T1)*. + +--- + +## Flavor notes +- **The beating IS the engine** — the show's signature image is a child smiling through a beating because each blow makes him stronger, while faking agony so no one finds out. Every promo must carry the *injustice* of it, not just the cool of it. +- **Five stacked secrets** — weapon-body (Godforge), the nine-dragon Furnace/Black Fire, the Shattered Dagger, the Storage Ring, the soul-forge. None known to anyone; the gap between what Zane can do and what he can show is the core loop. +- **Concealment over flexing** — Zane wins quietly, fakes weakness, lays low (he refuses to provoke Caleb until cornered). Power is a secret he protects, not a banner. +- **Elara is the unreachable north star** — every gain is measured against the distance to Infernal Peak; the goal recedes (the Adrian power-gap, the pivot to Weapon Forging). Never delivered. +- **Class hierarchy at every altitude** — slaves vs Lowell kids → branches vs main branch → ordinary applicants vs Legacy Houses → Outer Disciples vs Core Apprentices vs Great Houses. The strong own the weak everywhere. +- **Two-phase world** — Phase 1 House Lowell / Castermere (eps 1–27, origin & enslavement); Phase 2 Skyreach Sect / The Capital (eps 28–100, primary arena). Promos default to one or the other; don't blur them. +- **Vengeance with a code** — Zane's rage "froze" rather than flared; he punishes rule-breakers by the very House rules they ignore. Principled, not feral. + +--- + +## Relationship map (ep 100) +- **Zane ↔ Elara:** the foundation; every choice serves freeing her. Imprisoned on Infernal Peak, unaware Milo is dead, unreached. The driving, unresolved bond. +- **Zane ↔ Milo (dead):** murdered father, missing Greenwind Blade; the vengeance core against the uncles. +- **Zane ↔ Owen:** the betrayer who poisoned Milo and runs the House; the ultimate origin-side reckoning, unresolved. +- **Zane ↔ Perrin:** primary cousin-rival; stole Zane's birthright Crystal, now a Skyreach Core Apprentice under Caleb. Persistent humiliation Zane will repay. +- **Zane ↔ Andrew:** crippled and removed in the origin arc (ep 16). +- **Zane ↔ Evil Jace (dead):** the man whose fire tempered him and whose ring funded his freedom. +- **Zane ↔ Ethan Grant / Rhys:** genuine Sect allies; awed, loyal, exposition conduits. +- **Zane ↔ Isla Novak:** rule-bending mentor on Misty Peak; recruited and arms him. +- **Zane ↔ Caleb Warrick:** Sect arch-rival (Legacy House); orders his death, pressures Elara through his brother. +- **Zane ↔ Adrian:** the power-gap that humbles Zane and redirects his plan toward Weapon Forging. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mdp.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mdp.md new file mode 100644 index 0000000..18f2e41 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mdp.md @@ -0,0 +1,140 @@ +# MDP — My Dragon Princess — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_mdp_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — eps 1–20 read closely (verbatim); 20–100 sampled for threads, limits, cast, and entry map. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion. Build top-down; keep the top fast. + +> **Source note.** Built from `MDP 1-100.docx` (the canonical 100-episode script). An earlier rough intake exists under the working codename **"DragonCore"** (`additional resources/DragonCore_RawSource_intake_v1.md`); where the two disagree (e.g. "Cherry Grove Middle School" vs. **Cherry Grove High School**, raunchier framing of the inciting fall), **the docx is canonical.** + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +> Proposed for `three_pillars.md` (no prior MDP entry existed). Pillar tagged **(Thruline)** is the Relatable Thruline source (W2). + +1. **Dragon Core Cultivation** — the swallowed core, the Spirit Concentration Scroll, the race-against-death progression *(fantasy element / progression engine)* +2. **Accidental Engagement to the Dragon Princess** — her life is bound to his cultivation; a forced marriage and a slow-burn romance *(character stakes)* +3. **Hidden Dragon Clan / A Mortal Among Dragons** *(Thruline)* — a secret dragon world living as modern human elites, and the "mere mortal" they look down on *(setting)* + +## Protagonist — Jacob (Brown) +**Identity.** A 20-year-old second-year Mechatronic Engineering student, raised by his grandmother in Sturgeon Bay while his parents stay perpetually abroad. A self-described "loser" — no girlfriend in 20 years, "friendzoned six times this semester" — who keeps his head down. A high-school girl falls out of the sky and her dragon core drops down his throat by accident (Ep 1). Days later he's the Dragon King's chosen **son-in-law**: the only way to keep both of them alive is for the mortal nobody to cultivate a dragon technique and, eventually, marry the princess. A nobody is now secretly tied to the most powerful family he's ever met — and can't tell a soul. Engine fit: **Secret Identity / Threat of Exposure + Self-Sacrifice/Loyalty.** +**Combat.** None in the opening — this is the load-bearing point. Jacob is a *mortal*. His only edge is an unstable strength flicker from the core (lifts a dorm table one-handed, beats Sam at arm-wrestling, then loses again as it fades, Ep 5–6). He wins early conflicts with patience, decency, and refusing to be cowed, not power. Don't write him strong. +**Power Source.** Sophie's immature **Internal Core**, lodged in his stomach. It absorbs Heavenly & Earthly Spiritual Energy on its own; uncultivated, it will eventually make his body **explode** (Ep 8, Ep 20). He suppresses it via the **Spirit Concentration Scroll** — Level 1 broken by ep 20, slow and self-taught. His element is **water** (Susan, Ep 11). +**Voice.** Calm, deadpan, low-key; a dry running internal monologue; conflict-avoidant until his self-respect or his people are touched, then flatly defiant. Warm and dutiful toward his grandma. Self-deprecating about his own luck. He keeps the secret by half-truths, never lies he can't hold. + +**Voice Samples (verbatim — never paraphrase):** +1. "I'm such a loser…" (Ep 1) — the baseline self-image the whole reversal pushes against +2. "Hey… I saved you…" (Ep 1) — to the girl already running off; no gratitude, only trouble +3. "Sure. Let your parents come see me, we'll see who's more afraid of who!" (Ep 6) — defiance under threat +4. "The problem is I never wanted to get married to you either, ok? What can I do when I've been kidnapped and brought here?" (Ep 12) — to Sophie; the trapped-equals dynamic +5. "You have a problem with me entering my fiancée's bedroom?" (Ep 14) — dry teasing, the warmth surfacing +6. "Just because he is the son of the Deputy Mayor, does that mean he owns the entire school?" (Ep 52) — his moral floor against entitled power + +**Drift tripwires.** becomes an instant powerhouse | stops hiding the secret | turns confident/cocky instead of low-key | resolves the marriage into settled coupledom | loses the deadpan and narrates feelings directly | forgets his grandma / the ordinary-life anchor. + +## Deuteragonist — Sophie +**Identity.** The Dragon Princess: a Cherry Grove High senior, daughter of Drakon (Dragon King of the North Atlantic) and Helen. On her first attempt to make rainfall she ditched her supervisor, fell, and lost her core to Jacob (Ep 1, Ep 8). Without it she is **"an ordinary mortal"** who, per clan records, won't live five years before maturity unless the core's essence is restored (Ep 8). Willful, spoiled, jealous, childish — and, underneath, kind enough to bet her own future rather than let an innocent be cut open or killed. +**Voice.** Imperious, stubborn, easily flustered into blushing; comebacks over reasoning. + +**Voice Samples (verbatim):** +1. "Did you take something from me yesterday?" (Ep 2) — her entire introduction is an accusation +2. "You will come to me yourself." (Ep 3) — proud, prophetic; she's right +3. "I'd rather die!" (Ep 8) — to the marriage plan, before she relents to save him +4. "I never agreed to marry you. So if you don't keep your hands to yourself, I am going to cut them off!" (Ep 12) + +**Drift tripwires.** gets her powers back | turns sweet/compliant too early | the romance consummates | she stops being the reason he's in danger. + +## Setting — Entry-Window World +**Feel.** Present-day Wisconsin — a normal university, a dorm full of card games and friendzones, a grandma's beach cottage in Sturgeon Bay. The twist is hidden in plain sight: **dragons live among humans as the wealthy elite.** The Dragon King runs a NASDAQ-listed empire (MTX Group, a 70-story tower) and is the biggest donor to Jacob's school; the Dragon Queen is a celebrated interior designer; an Elder is the university's managing Vice President; the prettiest lecturer on campus is a clan Inspector who can kill him. The wonder and the menace both wear business suits and aprons. + +**Sensory Samples (verbatim):** +1. "A girl was falling from the sky! … That girl was about to land on his head!" (Ep 1) +2. "We are… Dragons." (Ep 9) — Elder Liam, after summoning a water bead in a corporate office +3. "Strange things happen every year in this college, but they sure are stranger this year." (Ep 16) +4. "He's alright. He's the king of the North Atlantic." (Ep 17) — Helen, of her husband, while roasting a chicken + +**Drift tripwires.** dragons as open fantasy spectacle (the world is a SECRET hidden inside ordinary modern life) | a medieval/otherworld setting (the action is a dorm, a cafeteria, a suburban house, a corporate tower) | erase the wealth/power gap (the mortal-among-dragons humiliation is the engine) | mythic dragons that don't also pay taxes and drive a low-profile Chevrolet. + +## Tone Constraint +Warm romantic comedy over a hidden-world wish-fulfillment, with a thread of class humiliation underneath. The laugh is the gap between the mundane (arm-wrestling, English grammar homework, dorm gossip) and the impossible (a princess whose life he's holding in his gut). Failure mode: tip into action-fantasy or harem fan-service and the empathy nerve — the dismissed nobody quietly carrying something precious — stops landing. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +A storm out of nowhere; Jacob, in pajamas and slippers because he lost at rock-paper-scissors, runs for cover — and a girl falls out of the sky onto his chest. As he gasps, "something sweet, smooth, and small" drops down his throat (Ep 1). She wakes, hits him, runs off without thanks. That night he finds **green, dragon-scale skin spreading up his right arm.** The hook is fully loaded in minutes: an impossible event, a stranger who's furious at *him*, a mark he can't explain, and the dawning sense that the world isn't what he thought. The wound named early: a 20-year nobody, "such a loser," who only meets women who fall from the sky. + +## First 5 episodes *(the first sitting)* +The girl (Sophie) puts up "WANTED" posters across his campus and a $500 bounty to drag him out, demanding her "bead" back (Ep 2–3). The green mark won't wash off; a hospital calls it dye (Ep 2). His strength surges and fades (Ep 5–6). By ep 6–9 the dragons surface: black sedans, a corporate tower, an Elders' meeting where they debate cutting the core out of his stomach — or killing him — before settling on the plan that makes him Sophie's fiancé. Elder Liam reveals the truth ("We are… Dragons," Ep 9), hands him the Spirit Concentration Scroll, and binds him to silence. The listener now knows: the secret, the stakes (his life and hers), the captor-family, the cover, and the clock. + +## First 20 episodes *(texture band)* +Jacob is pulled into the family: dinner at the Dragon King's deceptively plain house, where Helen mothers him and Drakon quietly approves (Ep 12–14); a first, charged near-fall in Sophie's bedroom (Ep 14–15). The hidden-world rules arrive through people, not lore-dumps — **Susan** the Inspector ambushes him about his water aura and threatens death for exposure (Ep 10–11); **Helen** explains Inspectors and the clan over a roast (Ep 17); **Kenith**, Sophie's third uncle, openly calls him "a mere mortal" not worthy of his niece (Ep 18–19). Jacob starts tutoring Sophie in English (she scores 20/100) in exchange for cultivation guidance, and **Drakon personally coaches him** through the Scroll's three levels, breaking **Level 1** (Ep 19–20). Introduced but not yet load-bearing: Kathy (the class president crush), Sam and the roommates, the looming two-family meeting, Kenith's Heavenly Tribulation. + +## HARD BLOCKS *(opening-binding)* +1. **The dragon world is a SECRET — Jacob can never reveal it.** Liam binds him ("you must hide it from other people," Ep 9); Susan threatens to kill him if he exposes the clan (Ep 11). Roommates, Kathy, his grandma, and his own parents must stay in the dark. Breaking the secrecy breaks the premise. +2. **Jacob is a mortal, not a dragon — and has no real power in the opening.** His strength only flickers and fades (Ep 5–6); he is repeatedly, openly dismissed as "a mere mortal," "useless," "an ant" (Ep 8, Ep 18). Don't write him winning by force. +3. **The core can't simply be cut out and returned — because of a protective lie.** Privately Drakon admits returning it would harm no one; he had **Liam lie** to the Elders that the contaminated core can't be safely re-implanted, specifically to keep them from killing Jacob (Ep 13). The entire engagement rests on this lie. Don't let the lie surface as anchor. +4. **Uncultivated, the swallowed core will make Jacob's body explode** (Ep 8, Ep 20). This is the permanent danger that forces cultivation. Power is never free or safe. +5. **Sophie has no powers — she is "an ordinary mortal" who dies without the core.** Records say five years before maturity (Ep 8); the restored-essence deadline is ~3 years or she won't live two more (Ep 13). Don't re-power her; don't resolve the clock. +6. **The marriage is the mechanism, not yet the relationship.** "Surrogate core cultivation" requires marriage and, eventually, "Consummation" (Elder Frank, Ep 8) — but in the opening it is unwanted on both sides, never consummated, and not even a real kiss (the Ep 1 contact "didn't feel like… a kiss"). Keep it slow. +7. **Inspectors outrank almost everyone and can't be fooled by aura.** Susan can read Jacob on sight; "even two Elder Liams wouldn't be able to defeat Susan" (Ep 17). Don't write Jacob hiding from or overpowering an Inspector. +8. **Kenith and the hardline Elders see Jacob as disposable.** "Kill him and dump his body into the sea. No one would know" (Elder Bruce, Ep 8); "a mere mortal… Why should we care" (Kenith, Ep 18). The clan's contempt is load-bearing injustice — don't soften it to friendly teasing. + +## Entry map *(tease ok, anchor flags)* +- **Susan (Inspector / "pretty teacher")** — enters ~ep 10–11; becomes Jacob's covert cultivation tutor ~ep 47–53. +- **Kenith (Third Uncle)** — enters ~ep 18; his **Heavenly Tribulation** is set for "this year"/"next month" — teased, never resolved by ep 100. +- **Kathy (class president, love-triangle)** — present ep 6/10, escalates ~ep 22–23; revealed as Kyle's sister ~ep 98. +- **The two-family meeting** — proposed ep 14, paid ~ep 78–82. +- **Jacob's parents (secret celebrity scientists)** — "back next month" teased ep 4; revealed ~ep 78–79. **Tease only.** +- **The Dragon Palace (hidden under the ocean)** — first named ~ep 48, entered ~ep 84. **Anchor = break.** +- **North vs. South Atlantic clan conflict** — opens ~ep 99–100 as the next-arc hook. Tease only. + +## Engines the opening supports +1. **Secret Identity / Threat of Exposure (UNTESTED for MDP):** every limousine pickup, cafeteria scene, and Inspector summons is a near-exposure event — the ordinary nobody secretly tied to a hidden dragon dynasty, one slip from blowing it. +2. **Self-Sacrifice / Loyalty (UNTESTED):** a near-stranger bet her life on him; he chooses to carry mortal danger (cultivation that could kill him) so she can live. The romance rides this engine, not lust. +3. **Underdog Awakening / Progression (UNTESTED):** the "mere mortal" at the absolute bottom of an eight-level dragon ladder, dismissed by kings and uncles, beginning to climb. + +## IM sources — opening window +- **The Elders debate killing him** (Ep 8): grown dragons calmly propose cutting open his stomach or dumping his body in the sea — over a girl's mistake. *World/Institutional, T1* +- **"A mere mortal"** (Ep 18): Kenith looks him over and writes him off to his face at the dinner table. *Personal, T2* +- **Bound to a stranger's life clock** (Ep 8, Ep 13): a 20-year-old's future is decided in a conference room he isn't allowed into. *Personal/Institutional, T2* +- **The public humiliations** (Ep 2, the WANTED bounty; later Ep 22+ Michael's wealth contempt): paraded before the whole campus, mocked as poor and lesser. *World/Personal, T2/T3* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the hidden clan treats a decent nobody as disposable property — his life weighed against a princess's and nearly discarded. +- **T2 (supporting):** the face-to-face contempt — "mere mortal," "useless," not worthy — and the wealth/power gap that makes him small. +- **T3 (deepening):** even as he does everything right (saves her, takes the danger, tutors her, honors the family), he's still the one who could die for her mistake. +- **Drift risk:** if the dismissal doesn't land before any wish-fulfillment payoff, the reversal reads as fantasy, not justice — feel how small they make him before he's worth anything. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **Can Jacob cultivate fast enough to keep them both alive — and stay undetected?** — initiates Ep 8/20, re-staked at Ep 99–100 (Susan warns of "serious danger" at Sophie's birthday). The core engine. By ep 100 he's only at Level 2. Never deliver. +2. **Will the arranged marriage become real love?** — the slow-burn. Builds through the mountain trip, sleepovers, and small tendernesses; mutual "I like Sophie" by ~ep 82; still no kiss by ep 100. Initiate, never consummate. +3. **The Kathy love-triangle — and will Sophie find out?** — initiates ~ep 22–23; near-detonates at the family lunch (~ep 80–81) when Jacob's parents mistake Kathy for his girlfriend. Open at ep 100. +4. **Will the "cousin" cover for Susan hold?** — initiates ~ep 48–50 (public necklace scene); Kathy keeps probing; never blown. Open. +5. **The North–South Atlantic clan conflict.** — newly opened ~ep 99–100: the South Atlantic's reclusive great master is coming to Sophie's birthday "because of the incident," and inspectors may not spare Jacob. The next-100 hook. Wide open. +6. **Kenith's Heavenly Tribulation — does he ascend to Heavenly Dragon?** — seeded Ep 8/18, restated ~ep 84–85/99. Gates the clan power balance. Open. + +## 2b · Canon Limits / Never-Happens +- **The show never publicly exposes the dragon world** — every cover story (Susan = "cousin"; the cars = a relative; the engagement = ordinary) holds through ch 100. Roommates, Kathy, grandma, and parents never learn dragons are real. +- **The show never makes Jacob strong enough to beat a dragon** — his growing strength only ever overcomes *mortals* (bullies, the college rival). Against dragons he stays "a newbie" who "would die first." +- **The show never re-powers Sophie** — having given up her core, she stays an ordinary mortal the whole span. +- **The show never consummates the romance or even delivers a real kiss on-page** — physical contact stays at caught-falls, hand-holding, and a band-aid; sleeping arrangements are always engineered to keep them apart. +- **The show never resolves the life-clock or pays off the cultivation crisis** — every breakthrough immediately raises a higher bar (Level 2 → now prove it publicly / reach Level 3 / survive the birthday). + +--- + +# LAYER 3 → companion: `world_mdp_deep.md` · *on demand only* + +> Full cast · full cultivation/Inspector mechanics · geography (the human world, the Dragon Palace, the mountain temples) · late-game arcs (parents reveal, Dragon Palace, rock-climbing/Kyle, clan-war setup) · relationship maps · flavor. Pulled only on a canon question, a W2 break-check, or a W5 deep-dive. + +--- + +**Cross-show contamination:** no `series_worlds.md` index file exists in `world docs/` to check against; ran a manual scan of active docs. Clean for Jacob / Drakon / Helen / Susan / Kenith / Kathy / Sam. **One collision: "Sophie"** is also a character in **RBM** — there an *antagonist half-sister* ("fifth-rank prodigy," Flaming Hawk "Lancelot"). Different show, opposite role; flag only, but keep distinct in any shared-ideation / BSV / adaptation work. (Also note: a *Dragon Mastery* motif appears in **TBB**'s pillars as a Jade Pendant item — unrelated cast.) Recommend creating a `series_worlds.md` index and registering MDP's cast in it. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mdp_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mdp_deep.md new file mode 100644 index 0000000..e1ea274 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mdp_deep.md @@ -0,0 +1,95 @@ +# MDP — My Dragon Princess — Layer 3 Deep Reference (companion) + +> On-demand only. Not in the default build path. Pulled for a canon question, a W2 break-check, or a W5 deep-dive. Reference-formatted; not narrative. Source verified through ch 100; eps 1–20 close (verbatim), 20–100 sampled. + +> **L3 note:** the working doc (`world_mdp.md`, Layers 0–2) is the only file W1–W5 load by default. This companion holds everything that isn't an opening constraint, a thread, or a limit. + +--- + +## Cast + +| Character | Type | Role | Relationship to Jacob | Entry | Anchor-safe? | Key detail | +|---|---|---|---|---|---|---| +| **Jacob (Brown)** | Human (carries a dragon core) | Protagonist | self | Ep 1 | YES | 20, second-year Mechatronic Engineering, Sturgeon Bay University. Raised by grandma; parents absentee (later: famous scientists). Swallowed Sophie's Internal Core; the Dragon King's son-in-law / "Prince Consort." Calm, low-key, hardworking, won't tolerate injustice. | +| **Sophie** | Dragon (princess, currently coreless) | Deuteragonist / fiancée | fiancée + tutoring student | Ep 1 | YES | Cherry Grove High senior. Snow-white hair, blue eyes, ponytail. Daughter of Drakon & Helen. Lost her core → "an ordinary mortal," dies within ~5 years (pre-maturity) if unrestored. Willful, jealous, secretly kind. | +| **Drakon** | Dragon | **Dragon King of the North Atlantic** | father-in-law / cultivation coach | Ep 7 | YES | Square-faced, crew cut; calm, few words, immense presence ("waved his hand and Sophie froze"). Runs **MTX Group** (NASDAQ, 70-story tower), biggest investor in Jacob's university. Drives a low-profile black Chevrolet. Personally coaches Jacob's Scroll. | +| **Helen** | Dragon | **Dragon Queen** | mother-in-law / warm advocate | Ep 12 | YES | Renowned interior/architectural designer (designed a top-ten Wisconsin landmark — the university stadium). Warm, mothering, but steel under it ("more ferocious than Drakon" when crossed, Ep 18). Red Ferrari. Raised Susan. | +| **Elder Liam (Liam Davis)** | Dragon (North Atlantic master) | Jacob's clan guardian | guardian / first guide | Ep 7–9 | YES | Doubles as Managing **Vice President of Sturgeon Bay University**. Gentle-but-aggressive; gave Jacob only the **first chapter** of the Spirit Concentration Scroll. Lied to the Elders (at Drakon's request) to protect Jacob. | +| **Kenith (Third Uncle)** | Dragon | antagonist (contempt) / late power-tier | Sophie's uncle; disdains him | Ep 18 | YES | Drakon's younger brother; most powerful of the brothers, later "the No. 1 Master in the Human Realm." Bushy brows, big eyes, bad temper, soft only for Sophie. Calls Jacob "a mere mortal." **Heavenly Tribulation** pending. | +| **Elder Bruce** | Dragon (Elder) | hardliner (cameo) | would have killed him | Ep 8 | YES | "All words and no action"; proposed cutting the core out / dumping the body in the sea (Ep 8). Comic-menacing, not a true threat. Also facing this year's Tribulation. | +| **Elder Frank** | Dragon (Elder) | clan functionary | proposed the marriage solution | Ep 8 | YES | Old, disliked by Sophie; floated "Consummation"/surrogate-core cultivation (Ep 8). Later escorts Jacob/Grandma; controls rain; near breaking the 9th level of the Purple Light Scroll. | +| **Susan** | Dragon (**Inspector**, "Heavenly-level Master") | covert ally / cultivation tutor | watches him, then trains him | Ep 10 | YES (caution) | The university's "prettiest teacher" (Weak Optical Signal Processing). 24; orphan raised in the Dragon Palace by Drakon & Helen. Cold "Ice Queen." Can read auras on sight; can kill him if he exposes the clan. Public cover later: Jacob's "cousin." | +| **Sam** | Human | best friend / comic relief | roommate (Room 302) | Ep 1 | YES | Six feet, athletic, foul-mouthed, fiercely loyal; the one Jacob most struggles to keep the secret from. | +| **Kathy** | Human | love-triangle interest | classmate / crush | Ep 6 (named ~Ep 10) | YES (caution) | Class President; one of the most popular, top-of-class. Friend-zoned Jacob before the story. Revealed ~ep 98 to be **Kyle's younger sister**. | +| **Grandma (Louise)** | Human | emotional anchor | raised him | Ep 4 | YES | Lives at the Sturgeon Bay beach cottage; dabbles in stock trading; once "saw a dragon" in her youth (Ep 4). Later falls ill (~ep 55) and moves in with Sophie's family; forces Jacob's parents to account for their absence (~ep 79). | +| **Walter Brown (Dr.)** | Human | absentee father (late reveal) | father | ~Ep 78 | NO (tease) | World-famous biologist (Gairdner Award; "Nobel candidate"). Workaholic, emotionally distant. Teased from Ep 4 ("back next month"). | +| **Mila Brown (Dr.)** | Human | absentee mother (late reveal) | mother | ~Ep 78 | NO (tease) | World-famous meteorologist/climate scientist (Graff Award). Equally absent. | +| **Michael** | Human | college rival | rival | ~Ep 22 | YES | Rock Climbing Club president; "most handsome/athletic"; **Deputy Mayor's son**. Wealth contempt toward Jacob; loses to him repeatedly (race ~ep 40, climbs ~ep 93–95). | +| **Kyle** | Human | basketball captain / late ally | rival-then-recruiter | ~Ep 42 (named ~Ep 74) | YES (late) | University team captain, 2m+, "infamous," national champion. Kathy's older brother (reveal ~ep 98); recruits Jacob & Sam ~ep 97. | +| **Lisa** | Human | minor rival/foil | "most popular girl" | ~Ep 11 | YES | Sorority girl chasing Michael; recurring background foil. | +| **General Arthur** | Dragon | palace functionary (cameo) | tours him the palace | ~Ep 85 | NO (deep) | Hunchbacked old palace general (Jacob suspects a shrimp true-form); greets him "Prince Consort Jacob." | +| **Jacob's parents-in-law's circle (Elders' Council)** | Dragon | institutional body | decided his fate | Ep 8 | YES (offscreen) | ~A dozen Elders; debated and "agreed upon" the second-option (cultivation/marriage) plan. The body whose contempt/authority is load-bearing. | + +--- + +## Cultivation & Dragon Mechanics + +**The Dragon Core (Internal Core).** +- A dragon is born with one; it "innately contained the instinct of absorbing the Heavenly and Earthly Spiritual Energy… a supreme treasure of the world" (Ep 20) — the source of a dragon's strength. +- Sophie's was **immature and small**; it fell into Jacob's mouth by accident (Ep 1, explained Ep 8). Because it was weak, he didn't immediately explode. +- **Hard rule (Ep 20):** "If he didn't follow through the Dragon Clan's cultivation technique to mediate and suppress the energy of the Internal Core, his body would explode sooner or later due to the growing power of the Dragon Core." +- **Sophie's clock (Ep 8):** a clan member who loses their core before maturity "can't live for more than five years"; herbs might extend it but are too risky for her. +- **The restoration deal (Ep 13, Drakon):** within ~3 years Jacob must "open up all the openings of the dragon core and transfer half of the Connate Dragon Essence back to her," or she "won't be able to live for more than two years." Achieved via **surrogate core cultivation** — which requires marriage and, eventually, "Consummation" (Elder Frank, Ep 8; Elder Liam confirms it's a real but near-extinct method). +- **The protective lie (Ep 13):** Drakon privately states returning the core would in fact harm no one; he had Liam tell the Elders otherwise so they wouldn't kill Jacob. The engagement is built on this lie. + +**The Spirit Concentration Scroll** (the Dragon Tribe's fundamental technique; three levels, Ep 20 verbatim): +1. "Communicate with heaven and earth, feel the energy in nature, and purify your body." +2. "Guide the energy into your body… slow, but it really helps strengthen your body." +3. "Release the energy around your body." → **"You can only cultivate other more formal cultivation techniques after passing the third level."** +- Liam transmitted only the **first chapter** (Ep 9; confirmed limiting his progress, ~ep 52). Drakon hand-coaches the rest (Ep 20). Jacob's element is **water** (Susan, Ep 11). He breaks **Level 1** by ep 20; **Level 2** ~ep 53 (with a visible sky-vortex side effect); still Level 2 by ep 100. + +**Cultivation ladder.** Eight levels; the highest is the **Heavenly Level** (Sophie, Ep 19). Above the Human Realm is the **Heavenly Dragon**, reached by surviving the **Heavenly Tribulation** (Kenith's pending ascension). Rough power order: ordinary mortal ≪ Jacob ≪ Sophie's baseline ≪ Liam (a North Atlantic master) ≪ Susan (Inspector, "even two Elder Liams couldn't beat her," Ep 17) ≪ Kenith ("No. 1 in the Human Realm"). + +**Inspectors (Ep 11, Ep 17).** Authorized clan supervisors who police internal events (bribery, murder), may act before reporting, and are mostly above Heavenly Level. They sense each other and read auras on sight; ordinary cultivators can't detect or hide from them. Susan is one; she "won't hurt you as long as she recognizes your legal identity," and is even bound to protect a legitimate clan member — but will kill to protect the secret. + +**Aura.** Everyone emits one; the strong read the weak. Jacob can't yet sense his own. A mortal giving off "the aura of a dragon" is what exposes him to Susan (Ep 11). + +--- + +## Geography & factions + +- **Sturgeon Bay (Wisconsin)** — Jacob's hometown; his grandma's two-story beach cottage, ~200m from the shore; the reef field offshore later proves to sit near the hidden Dragon Palace. +- **Sturgeon Bay University** — Jacob's school; dorm Building No. 7 area, Room 302; Mechatronic Engineering. Drakon's MTX Group is the biggest investor (built the stadium, library, media building); Elder Liam is Managing VP. +- **Cherry Grove High School** — Sophie's elite private school for "affluent and wealthy families." (The earlier "DragonCore" intake mislabels this "Middle School" — non-canonical.) +- **MTX Group HQ** — a ~70-story downtown tower, NASDAQ-listed; Drakon's 75th-floor President's Office and adjoining Elders' conference room (the Ep 7–9 set). +- **The Dragon King's house** — a deceptively plain two-story home, luxurious inside; Helen-designed; the attic studio becomes Jacob's cultivation room (Ep 20). +- **The Dragon Palace** — the clan's true seat, hidden **under the ocean** off the Sturgeon Bay reefs; first named ~ep 48, entered ~ep 84 via a deadly reef-passage of array formations (needs the Spirit Concentration Scroll + a Water Repellent Bead to pass). Houses sub-palaces (Hundred-Flower / Mystic Creature / Ice) and Kenith's Tribulation altar. +- **Wildcat Mountain (State Park)** — site of the dragon-clan **mountain temples** (Celestial Cloud / Oneness Temple, the Founder's Palace, ancestor inscriptions); the family-trip cultivation arc ~ep 24–31. "Not accessible to mortals." +- **Regional Dragon Clans** — **North Atlantic** (Drakon's, "Wisconsin Clan," land-business dominant) vs. **South Atlantic** (cultivation-dominant, a reclusive century-old great master). A long grudge that ignites the ~ep 99–100 hook. Others referenced: South/North Pacific, East/South Arctic, plus lesser River/Lake Dragon Kings. + +--- + +## Late-game arcs (sampled, deep — anchor = break) + +- **Cultivation coaching → Wildcat Mountain (~ep 20–31):** Drakon then Susan teach the Scroll; Levels 1–2 broken; hand-holding and the first romantic warmth on the mountain. +- **College rivalry ignites (~ep 22–45):** Michael's wealth contempt; the 1500m race win (~ep 40); the bully arc and Sam's beating; Jacob's "outburst" beating five players (~ep 60); unfair-punishment fight. +- **Susan arc (~ep 47–53, 98–99):** the public necklace (a one-month protective array masking his "impure essence"), the "cousin" cover, private 4–6pm tutoring, the 110-lb training bracelets, and the ep 99 war warning. +- **Grandma's illness & the parents reveal (~ep 55–83):** Grandma hospitalized and moved in with Sophie's family; the famous Drs. Brown revealed as Jacob's parents; Grandma's outburst forcing them to account; the two-family lunch giving a soft, conditional marriage blessing. +- **Dragon Palace / "Prince Jacob" (~ep 83–89):** underwater palace tour, elixir fruits (a "common" fruit ≈ five years of a master's cultivation), General Arthur, Kenith's Tribulation altar under construction. +- **Rock-climbing / Kyle finale (~ep 90–98):** sabotaged climb (Sam's rope tampered), two-climb victory over Michael, the club's predatory fees exposed, Kyle revealed as Kathy's brother and recruiting Jacob & Sam to basketball. +- **Clan-war setup / Sophie's birthday (~ep 99–100):** Susan warns the North–South Atlantic party could mean "serious danger" for Jacob; the quiet domestic ep-100 close (Sophie applies a band-aid to his wound). The hook into the next 100. + +--- + +## Open canon questions (for future episodes) +1. Can Jacob reach Level 3 / restore Sophie's essence in time — and what happens at the high-stakes birthday party? +2. Does Kenith survive his Heavenly Tribulation and ascend to Heavenly Dragon? +3. How and when does the North–South Atlantic conflict break — and does it touch Jacob? +4. Will the protective lie about Sophie's core ever surface? +5. Will the dragon secret hold against Kathy / Sam / Jacob's parents indefinitely? +6. Does the Jacob–Sophie romance turn real — and what is the "Consummation" mechanic's real cost? +7. What is Susan's full history in the Dragon Palace, and why does she owe the Wisconsin Clan? + +--- + +**File status:** DRAFT (source-built). Voice/Sensory samples verbatim with episode numbers. Mechanics and hard limits drawn from explicit source rules (eps 1–20 close-read; 20–100 sampled). Post-ep 25 cast/arc detail is sampled, not exhaustively read — verify specific beats before scripting deep arcs. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mvs.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mvs.md new file mode 100644 index 0000000..ea858f4 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mvs.md @@ -0,0 +1,122 @@ +# MVS — My Vampire System — Series Worlds Entry + +> **Opening anchor:** first 5 min (broke bullied runt bleeds on a dead-parents book) / first 5 eps (military draft, Level-1 sorting, the System) / first 20 eps (Halfling evolution, blood hunger, the first bite). **Source verified through:** ch 99 (full run). +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_mvs_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — eps 1–20 read closely; 21–99 sampled; no fabrications retained. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion, on demand only. + +--- + +# LAYER 0 — ESSENCE · *the only default load · ≤ ~650 words* + +## Three Pillars (locked) +1. **Secret Identity** *(Thruline)* +2. **Progression Elements / The System** +3. **Hostile Academy / Institution** + +## Protagonist — Quinn Talen +**Identity.** A broke, bullied 16-year-old orphan whose only inheritance is a book his dead parents left him — one nobody can open until his own blood touches it. A drop of blood activates a game-like System and turns him into a Halfling vampire. He is not chosen or prophesied; the System is enormous but his public status stays **Level 1**, and hiding what he is becomes the entire game. Engine fit: **secret-power-underdog** — the power is huge, the wristwatch number never moves. + +**Combat.** Fights on his own body's HP, in brackets, with broken fists and bent legs. Wins by **Inspect + feint + ambush**, not force — chooses **Agility over Strength** ("fast and agile like an assassin," Ep 18), masks up and strikes at night. Weakness: stuck at Level 1; daylight halves all stats. + +**Power Source.** A book left by his parents, delivered by a government agent when he was ten — *"the only thing that his parents possessed - One that they passed down when they died"* (Ep 1). 112 failed attempts to open it (acid, fire, cutting). A drop of his blood activates it; the book **dissolves into dust** as it enters him and no longer exists. Leveling triggers **Halfling evolution** → fangs, night vision, sun-weakness, and blood hunger that ticks −1 HP/hour until he feeds. Blood swipe costs −1 HP per use. NOT an amulet, sword, ring, or social bloodline. + +**Voice.** A self-talking runt who argues with his own System notifications. Defiant-under-humiliation, not cocky-hero. Names his own weakness, white-lies to his friends, and carries real moral friction about feeding — he negotiates around the bite, he doesn't relish it. + +**Voice Samples (verbatim — never paraphrase):** +1. "I bet you don't even know how many fingers I'm holding up!" (Ep 1) — defiance-as-armor +2. "Why is the world so unfair?" (Ep 1) — bitter lament +3. "Would I like to level up? Why even bother asking." / "Who cares? YES!" (Ep 17) — sarcastic with the System +4. "Have I become a vampire?" he mumbled to himself. (Ep 18) — horror recognition +5. "In the movies it looked so easy. Just the idea of sticking my teeth into someone… I just can't do it! Wait, maybe I don't have to! I could just make a small cut on his arm and lick it" (Ep 18) — moral workaround + +**Drift tripwires.** Public power display | wins on raw strength | non-blood activation of the book | relishes feeding | hero-confident voice | fights adults as equals. + +## Setting — Entry-Window World +**Feel.** A two-year mandatory **military academy** inside a hidden, over-advanced city. Wristwatches broadcast your power level, hold your credits, gate your movement. Students self-sort by number — low levels pushed to the back of the canteen, extorted in plain sight while guards do nothing. Sunlight is hostile; night is when Quinn can move. The cruelty is institutional and casual — gas the bus, bag the kids, ship them off at sixteen. + +**Sensory Samples (verbatim):** +1. "the boy spotted his attacker's glowing wristwatch, which lit up brightly in the dark, displayed the number one." (Ep 17) +2. "Even when there were no street lights, it was as if the moon had lightened everything up. A type of night vision of sorts." (Ep 16) + +**Drift tripwires.** Space / Dalki battlefield at entry | adults intervene to protect the weak | Quinn's watch removable or upgradeable | open-world freedom frame | daylight narratively neutral. + +## Tone Constraint +Hold the paranoid-underdog register: every humiliation is publicly verifiable on the wrist, and the dread is *being found out*, not being hunted. If it tips into power-fantasy triumph or open vampire spectacle, the secret — the show — is gone. + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate · ≤ ~880 words* + +## First 5 minutes *(the 50%-drop gate)* +Quinn, a bullied Level-1 runt with taped glasses, gets blasted into a wall on the last day of school and flips off the bully who did it (Ep 1). At home — a single government-provided room, no living relatives — he runs Test 112 on the half-kilo blood-red book his dead parents left, the one he cannot open. Frustrated, he gashes his thumb; a drop of blood hits the book. It floats, glows, flips its own pages in a language he somehow understands, then dissolves to dust as he blacks out hearing: *"Congratulations you have been granted the Va…."* + +## First 5 episodes *(the first sitting)* +The System wakes: daily quests, stat readouts, the sun penalty (Ep 3). He's drafted — gassed on the bus, bagged, dumped before three glass towers and a hidden city; the wristwatch is strapped on as his "lifeline" and power-level display (Ep 3). The level test scores him 5/5/5 in sun = Level 1 (Ep 6). His group: **Vorden Blade** (copies abilities by touch; an Original), **Peter Chuck** (timid, no ability, given the free military Earth book), **Layla Munrow** (Level 2 telekinesis, beast-bone bow), **Erin Heley** (Level 5 ice, "Ice Queen"). Quinn refuses the free Earth book — the first refusal his instructor has seen — and rooms with Vorden and Peter. + +## First 20 episodes *(texture band)* +Fighting is the fastest XP; Quinn gains **Inspect** (Name/Race/Ability/HP/Blood type + two ??? fields, Ep 11). The hierarchy bites: **Momo** (Level 6) warns the trio off; first-years extort credits at the stairs. Quinn masks up, ambushes bully **Rylee** at night, levels to 2, and **evolves into a Halfling** — fangs, blood hunger, −1 HP/hour (Ep 17–18). Starving, he bites **Layla** in the library (Ep 19–20) for a Strength point and carries her to the doctor **Hayley**. Hook: Peter bursts in — "It's Vorden, he's in trouble!" + +## HARD BLOCKS *(opening-binding)* +1. **Outing Quinn's System / vampire identity to everyone as the promo's cornerstone breaks the show.** The secret is the engine: *"If others were to find out of his rare ability it would start a bidding war between the private companies and the military"* (Ep 20). A near-miss cliffhanger (almost caught) is fine; a *delivered* public reveal is not. +2. **The wristwatch permanently displays Level 1 for Quinn.** It reads mutant-cell count but cannot read vampire MC (confirmed Ep 95). It is a NUMBER on a watch face — not a star, gem, or colored ring. No "squad mode." +3. **The danger is exploitation + surveillance, not a vampire hunt.** No academy-wide "kill vampires on sight" doctrine; "Pure" is an anti-*ability* faction, not a vampire-hunting order. Frame as "if they find out what he is, they'll take him apart for it." +4. **The book is gone.** It dissolved into Quinn on activation (Ep 1) and cannot be shown or referenced as an object afterward. +5. **Activation requires Quinn's own blood on the book.** No other trigger. +6. **Vorden's multiple personalities are a private secret.** Show switches as behavioral shifts; never name/explain the system upfront. +7. **Adults do not protect the weak.** Guards and teachers watch bullying and do nothing — by design (Ep 19, Ep 14). + +## Entry map *(where deeper elements enter — tease ok, anchor flags)* +- **Blood-type → stat mechanic** — enters ~Ep 11 (Inspect shows type); pays off ~Ep 26 (A→Str, B→Agi, AB→Stam) and ~Ep 36 (O→1 free stat point). +- **Soul weapons / awakening** — explained ~Ep 27; first seen ~Ep 46 (Momo's living whip). +- **Vorden's Raten personality** — surfaces ~Ep 44 ("Finally, I, Raten, have returned"). +- **Peter's betrayal** — ~Ep 44 (lured Vorden to the assembly-hall ambush for the second-years). +- **VR "Power Fighter" / "Blood Evolver" alias** — ~Ep 50–52. +- **Portals (green/orange/red) & Planet Pioletic** — ~Ep 59. +- **Bloodsucker form** — first triggers ~Ep 80 (0 HP from hunger). +- **Shadow ability (Level 6)** — book activates ~Ep 89; cloak/storage ~Ep 91. +- **Big Four Families / Truedream** — load-bearing ~Ep 95 (steal abilities; rival the military). + +## Engines the opening supports +1. **Secret Identity (PROVEN):** the watch makes weakness public while the System makes Quinn secretly dangerous — every scene runs on "they can't know." Best-performing MVS engine. +2. **Underdog Awakening (PROVEN, Q2 risk):** Level-1 runt levels into a Halfling; risk is resolving the book-mystery too early and bleeding Q2. + +## IM sources — opening window +- **Blasted into a wall, flips off the bully** (Ep 1): public humiliation answered with defiance. *Injustice, T1* +- **Refuses the free Earth book** (Ep 6): chooses dignity over the military's debt-trap. *Institutional, T2* +- **Gassed, bagged, dumped on a field** (Ep 3): brutal onboarding of children. *Institutional, T2* +- **Bites Layla to survive** (Ep 19–20): the monster he's becoming, against his will. *Internal/moral, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the visible wristwatch number — everyone can see he's Level 1, so every cruelty is publicly licensed. +- **T2 (supporting):** institutional design — adults profit from the bullying and let it run. +- **T3 (deepening):** the body-horror cost — hunger, sun-weakness, the bite he can't refuse. +- **Drift risk:** if a promo leads with vampire power instead of the humiliation, the empathy nerve never fires and CTI collapses. + +--- + +# LAYER 2 — RAILS (eps ~20–99) · *load at W1 (threads) + canon gate (limits) · ≤ ~380 words* + +## 2a · Conversion Threads +1. **Will Quinn be found out?** — pressure builds across the run (Hayley's bite-mark investigation ~Ep 95; Leo seeing his purple aura ~Ep 95). The core open loop; *initiate* the near-miss, never deliver the public reveal. +2. **Who beat and exposed Vorden — and why** — assembly-hall torture ~Ep 44; Peter's betrayal is the gut-punch behind it. Sells "your weakest friend sold you out." +3. **What is Vorden, really?** — Raten emerges ~Ep 44; the body holds more than one person. A second mystery layer under the first. +4. **The bloodsucker he can't control** — first trigger ~Ep 80; Quinn's own body becomes the monster. Tease the loss of control, withhold the aftermath. +5. **The world is bigger than the academy** — red portals and Planet Pioletic ~Ep 59; the Big Four Families rival the military ~Ep 95. Frame as scale, not as the promise to pay off. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Quinn operate openly as a vampire among allies who all know.** The secret is single-keeper-deep at the entry window (Layla, then Vorden); broad openness is post-run / off-canon. +- **The show never gives Quinn a soul weapon in the first year.** Soul weapons come after awakening (second-year material). +- **The show never makes the wristwatch a squad-assigner or beast-cell reader.** It reads MC, shows a number, handles credits, gates entry — nothing more. +- **The show never has a vampire clan, the Talen Clan, "Boneclaw," or a vampire ally "Fex" inside eps 1–99.** Those do not appear in the full run; do not build on them. + +--- + +# LAYER 3 → companion: `world_mvs_deep.md` · *on demand only* + +> Full cast, full System/world mechanics, late abilities, portals/ecology, relationship map, flavor. Pulled only on a canon question, a W2 suspected break, or a rare W5 deep dive. + +--- + +**Cross-show contamination:** Checked against `series_worlds.md`. One known collision: the spin-off **MVS-DR (A Dragon's Revenge)** shares the System/vampire framing — keep MVS canon clean; MVS-DR cast (Amy, Lancy, Noir, Pureblood faction) is a separate file and must not bleed into MVS promos. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mvs_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mvs_deep.md new file mode 100644 index 0000000..ba7fe2d --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_mvs_deep.md @@ -0,0 +1,92 @@ +# MVS — My Vampire System — Layer 3 Deep Companion + +> **L3-companion note:** Not in the default build path. Pulled on demand only — a canon question, a W2 suspected break, or a W5 deep dive. Reference-formatted (tables/bullets), not prose. Source-verified through ch 99 (full run). Working doc: `world_mvs.md`. + +--- + +## Cast (full) + +| Character | Entry | Role | Key source facts | +|-----------|-------|------|------------------| +| **Quinn Talen** | Ep 1 | Protagonist | Orphan, 16; parents died in the Dalki war; given the System book at age 10. Halfling after Ep 17; watch stuck at Level 1. | +| **Vorden Blade** | Ep 4 | Ally / parallel mystery | Original; copies abilities by touch (resets daily; Quinn/Peter are "duds"). Three internal personalities: Vorden, **Raten** (aggressive, two abilities at once, Ep 44), and an implied "little one." | +| **Layla Munrow** | Ep 5 | Ally / blood source / mole | Level 2 telekinesis; beast-bone bow (arrows split via telekinesis). Obsessed with vampires (father was a writer). **Pure Agent 83**, undercover, communication sphere (revealed Ep 84). | +| **Peter Chuck** | Ep 5 | Ally → betrayer | Timid, no native ability; given free Level-1 Earth book (mud staff). Broken by the second-years and **lured Vorden into the assembly-hall ambush (Ep 44)** — Quinn never learns the full truth in-window. | +| **Erin Heley** | Ep 5 | Stakes ally | Level 5 ice ("Ice Queen"); silver longsword; expressionless; exceptional fighting IQ — beats higher levels. Joins fights for principle, not for Quinn specifically. | +| **Momo** | Ep 14 | Second-year antagonist | Level 6; ability **sees ~2 seconds into the future** (outlines, via eyes); soul weapon = a living whip (Ep 46). Runs the assembly-hall torture (Ep 42–46). | +| **Rylee Blade** | Ep 15 | First-year bully | Level 2/2.5; **Hardening** (one body part at a time). Quinn's repeat target; blood type B+. | +| **Kyle Main** | Ep 11 | First bully fought | Transformation (tiger claws); blood type B−. | +| **Dan** | Ep 19 | Bully boss | Large; extorts credits via Rylee. | +| **Hayley** | Ep 20 | School doctor / detection threat | Healing ability; removed Layla's bite marks; notices recurring bite marks and Quinn's abnormal healing/growth; "general's daughter" framing; Charm effect lands on her (Ep 95). | +| **Leo** | ~Ep 38 | Beast-weapons teacher / war hero | "Blind Swordsman"; **aura sight** through walls (humans yellow, beasts red, **Quinn purple/unique** — Ep 95); katana cuts Glathrium silently; principled, protective. | +| **Del** | Ep 8 | Homeroom teacher | Blonde, curly hair, glasses, perpetually easy smile; secretly terrified on Pioletic (Ep 95–96). | +| **Sergeant Griff** | Ep 3 | Draft sergeant | Hard-faced; runs the gas-and-bag onboarding. | +| **Jane** | Ep 5 | Test instructor | Cold; offers the free Earth book; reports Quinn's refusal up the chain. | +| **Brandon Richardson** | ~Ep 33 | Bully (dead) | Killed off-page after the weapons-class incident; Quinn questioned and cleared (Ep 41). | +| **Fei / Loop** | ~Ep 33 | Bullies | Fei (Level 2.5, blood A+); **Loop** (Level 3, bone manipulation, blood **O−**) — finds Quinn feeding on Fei on the roof (Ep 34–36). | +| **Nathan / Fay Dallum** | ~Ep 47/84 | First-year general / sergeant | Nathan heads first-years (ego-driven); Fay = super-speed, leads the Pioletic rescue. | +| **Ian (Traveller)** | ~Ep 70+ | Pioletic ally/victim | Magnetism ability; **Truedream** family (dog tag); killed by Bloodsucker Quinn (Ep 81 / 95). | + +> **Big Four Families:** Originals who rival the military. **Blade** (copy), **Truedream** (steal abilities permanently, gift to trusted men; closest to the military — Ep 95). Two others unnamed in-window. +> **Pure:** anti-*ability* faction; government-labeled terrorists; use beast weapons; agents embedded (Layla). Hold one of two known demon-tier weapons. + +--- + +## The System (Quinn's, full) + +- **Race progression:** Human → Halfling (Ep 17, after Level 2) → Vampire (after first human kill, ~Ep 86). Irreversible; each changes his appearance. +- **Stats:** HP, Strength, Agility, Stamina, plus later Charm. Level-up grants 1 stat point; optional blood quests grant extra. +- **Sun penalty:** direct sunlight halves all stats (Ep 3). UV-based; mitigations introduced later (Deathbat ring at the shop). +- **Blood hunger:** −1 HP/hour until human blood is consumed (Ep 17); ~48-hour cycle; combat healing draws the timer forward. +- **Blood bank:** stores 100ml; auto-heals; a "second life" in combat. +- **Blood-type → stat (one per person, lifetime):** A → +1 Strength, B → +1 Agility, AB → +1 Stamina, **O → +1 free stat point** (Ep 26 establishes A/B/AB; Ep 36 confirms O via Loop's O− blood). Repeat donors give no further stat. +- **Inspect (Lv1→Lv2):** Name / Race / Ability / HP / Blood type + two locked ??? fields. Blurs in sunlight. At Lv2 reads objects (e.g., lock combinations) and blood samples. +- **Skills:** Blood swipe (Lv1, Ep 17 — 5m red energy line, −1 HP/use, no cooldown); later Blood spray; Daze; Charm. +- **Tutorials:** a blonde "creator" video teaches **Flash step** (≥15 Agility, ~5m, costs stamina, afterimage) and **Hammer strike** (≥15 Strength, internal-force punch) — Ep 40. +- **Bloodsucker form (Ep 80):** triggered at 0 HP *from hunger*; bald scalp, claws, black eyes; all stats doubled, HP halved, blood skills off, mind gone; attracted to human-blood smell; cannot tell friend from enemy. +- **Shadow ability (Level 6, "Blooded"-only, Ep 89+):** requires vampire cells; dimensional storage (objects sink into shadows), shadow control/cloak; fueled by MC. +- **Blood Ritual (Ep 92):** can turn a person "blooded" (loses their current ability); 2 slots, unused in-window. +- **Shop (unlocks Level 10):** beast-crystal currency; known item Deathbat Ring (3 hours of safe sunlight). + +--- + +## World mechanics + +- **Power levels 1–8**, subdivided 1.1–1.9; determined by activatable mutant cells (MC), not raw strength — skill beats level (Erin, Quinn). One mutation per human lifetime (one ability for life); Quinn is exempt because he's no longer human. +- **Ability books:** Levels 1–5 public; 6–8 military/corporate-controlled. The free military Earth book = a debt-trap pipeline (Ep 5–6). +- **Originals:** families who kept abilities private; often immeasurable by the watch; strongest rumored above Level 8. +- **Soul weapons / awakening:** second-year skill; unique weapon grown from MC; strength scales with MC regardless of the ability's combat value (Momo). +- **Wristwatch:** reads MC, displays a number, holds credits, gates entry, tracks location (curfew 10 PM). Cannot read Quinn's vampire MC (Ep 95). +- **Beast weapons:** crafted from beast crystals (tier = quality); activated by ability/MC for +5% (basic). Quinn's gauntlets: +3 Str, +2 Def, blood-swipe +5%. +- **Portals:** green (safe), orange (partial), red (abandoned/undiscovered, no rescue). **Planet Pioletic** — ruined first off-world settlement, six-month night, Glathrium construction (only Leo's blade cuts it), beasts Rattaclaw/Scordana/Deathbat. +- **VR "Power Fighter" (Ep 50+):** cross-school capsule combat using your real stats; Quinn's alias **Blood Evolver**; his red blood-swipe draws a "hacker?" forum thread. + +--- + +## Relationship map (end of run) + +- **Quinn ↔ Vorden:** mutual secret-keepers; Vorden engineers Quinn's hidden-power plan; Raten/personalities are an open question. +- **Quinn ↔ Layla:** blood source + protector; she is secretly studying him for Pure (hidden agenda). +- **Quinn ↔ Peter:** betrayal (Ep 44) sits unresolved; Quinn doesn't know the full extent. +- **Quinn ↔ Leo / Hayley:** both privately notice something off (purple aura; bite marks, abnormal healing) — detection pressure, not yet hostility. +- **Quinn ↔ Erin:** she registers Vorden's strength more than Quinn's; her recognition is a future shift. +- **Duke / second-years → Vorden:** institutional violence behind the assembly-hall arc. + +--- + +## Flavor notes + +- The wristwatch number **is** the injustice engine — humiliation is publicly verifiable; "Level 1 beside a Level 5" is the show's central image. +- Sweet blood-smell is the recurring sensory anchor and a dramatic-irony generator near any injured person. +- Double-layered secret by run's end: vampire identity **and** the Level-6 shadow ability, both invisible to the watch — two distinct cliffhanger shapes. +- The "little one"/Raten democracy inside Vorden is the show's most unconventional worldbuilding — a Self-Sacrifice engine hidden inside a Secret-Identity show. + +--- + +## Corrections logged vs the prior (truncated, ch-65) rebuild + +- Source verification now extends to **ch 99** (full run); Peter's betrayal and Truedream/Big-Four are confirmed in-window, no longer "unverified." +- **Fex** and the **Talen Clan / Boneclaw** vampire-clan material do **not** appear in eps 1–99 — flagged in Canon Limits, dropped from cast. +- Layla's Pure identity is **Agent 83** (Ep 84), not 84. + +> **Spin-off collision:** keep **MVS-DR (A Dragon's Revenge)** entirely separate — shared System framing, different cast/canon. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_pesd.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_pesd.md new file mode 100644 index 0000000..99848a9 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_pesd.md @@ -0,0 +1,132 @@ +# PESD — Princess Ebony & the Silver Dragon — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_pesd_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Eps 1–20 read line-by-line with verbatim quotes; Eps 21–100 sampled at every major beat. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion. Build top-down; keep the top fast. + +--- + +# LAYER 0 — ESSENCE · *LOAD THIS — the only default load* + +## Three Pillars (locked) +1. **Secret Identity** *(Thruline)* — "everyone has had something they had to keep hidden, where exposure means ruin." +2. **Patriarchal World** +3. **Royal Intrigue** + +## Protagonist — Ebony + +**Identity.** Firstborn of King Liam, barred from the throne because Allarion law forbids a woman to rule. At 14 (the female norm is 18) she shifts into Nova, an ancient stone dragon, and must hide it — a hidden dragon is a capital crime. A seer prophesied at her birth she'll be "the first female ruler of Allarion." Engine fit: **Forbidden Power / Hidden Identity** — the kingdom's strongest dragon, in a kingdom that would execute her for having it. Her cruelty is a real flaw; the arc is becoming worthy of the prophecy. + +**Combat.** Trained in secret with Davin (blackmailed into it) for four years — sword and shield, fast, rage-first. Out-spars and pins him by the eve of the ball. Weakness is temper; Nova warns, "If you let him control your emotions, you let him control you." + +**Power Source.** Nova — ancient stone dragon; melts sand to glass, dirt to obsidian. Hard limits: she hides her own presence from all dragons (this is what keeps the secret); lends strength/speed but each loan drains Ebony; cannot *control* Ebony, who is not a Hosento. Her command power works on lesser dragons, not her own willful host. + +**Voice.** Imperious, entitled, transactional — blackmail and threats of dismissal are casual tools. Quick to fury, slow to apologize, bristling against male authority, capable of withering scorn. Not a stock heroine — a tyrant-in-training the prophecy insists will soften. + +**Voice Samples (verbatim — never paraphrase):** +1. "Right now, I'm the one you need to worry about. I could go to my father and say I want a new nanny. He wouldn't think twice. Keep quiet, and you need not worry." (Ep 1) — blackmail as casual tool +2. "If I'm truly to become Queen, I must serve as an example to my people. Pushing through pain is a bravery that wins wars." (Ep 3) — cruelty rationalized as duty +3. "We might be bonded, but I am still the princess of this realm. I hold power over you. You must do as I say." (Ep 2) — commanding Nova +4. "I. WILL. NOT. HAVE. YOU!" (Ep 16) — the ball-rampage refrain +5. "I can't do this anymore. I messed everything up. I messed up my destiny." (Ep 84) — breaking point, on her knees + +**Drift tripwires.** Hero-confident voice | forgives easily | trained after shift | accepts male authority easily | cruelty as "misunderstanding" | apologizes unprompted | Nova's lessons land instead of clash. + +## Setting — Entry-Window World + +**Feel.** Allarion: a clifftop castle over Lake Halua, reachable by one highway. Everyone bonds a dragon at puberty (women ~18, men earlier) and dragon strength sets rank — but women are barred from ruling, fighting, training, or wielding weapons, and hiding a dragon is death. Gilded and oppressive at once: a father who loves his daughter yet would rather a commoner take the throne. The ball is the entry-window's spectacle and trap. + +**Sensory Samples (verbatim):** +1. "She will be powerful and brave. She will become the first female ruler of Allarion." (Ep 1) — the seer's prophecy +2. "I would rather see a commoner sit on the throne than a woman. Even my own daughter." (Ep 1) — King Liam, the wall Ebony must break + +**Drift tripwires.** Open-world freedom frame | women rule or fight openly in Allarion | Ebony shifts after Ep 1 / at the normal age | Nova arrives as a blank slate | servants respect without fear | prophecy never mentioned | peace already old and settled. + +## Tone Constraint +Hold the injustice as a *legal system working as designed* — laws with enforcement (death for a hidden dragon, flogging for disobedience), with a flawed Ebony inside it. Soften her cruelty into a misunderstanding, or drop the injustice into pure victimhood, and the transformation thesis collapses. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor — load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +Ebony is born; the seer prophesies she'll be "the first female ruler of Allarion"; King Liam, enraged his heir is a girl, jails the seer and forbids the prophecy. Fourteen years later Ebony — sneaking out to train illegally — overhears her father say he'd rather a commoner rule than his own daughter. She runs, and in raw grief first-shifts into Nova, who names herself an ancient stone dragon and promises, "One day, I promise you will be crowned queen." + +## First 5 episodes *(the first sitting)* +Ep 2: the King decrees Ebony picks a husband at a ball on her 18th birthday, or marries the first man at the gate. Ep 3 (four-year jump): now 18, she out-spars Davin (the knight she blackmailed into training her). Eps 4–5: Piroria — Prince Greyson and silver dragon Radion, who senses an awakened ancient dragon in Allarion, pushes Greyson to the ball, and reveals his mission to hunt rebels who fled Dragos Paradise. The listener knows: the hidden dragon, the ball ultimatum, Nova/Radion as ancients, the patriarchal law. + +## First 20 episodes *(texture band)* +Greyson arrives at Allarion (Eps 6–11); Liam floats him as a match. The ball (Eps 13–17): Radion recognizes her; their dance becomes a forbidden-truth exchange about Pirorian women warriors; Ebony's rage becomes a rampage on the princes; Nova's involuntary "STOP!" forces the room to its knees, exposing her power; Greyson whispers "Pick me"; she flees. Eps 18–20: no man will claim her (Radion secretly commanded every dragon to refuse), and Liam sends her to the council. (Banishment lands Ep 36 — tease, don't anchor.) + +## HARD BLOCKS *(opening-binding)* +1. **Nova is an ancient STONE dragon, not a regular Allarion fire dragon** — granddaughter of Omari and Mahala, arrived with memory/personality intact, hides her presence from all dragons. Treating her as standard breaks the premise. +2. **A woman hiding a dragon in Allarion is a capital crime; women cannot rule, fight, train, or wield weapons.** Framing Allarion as women-friendly breaks the show. +3. **Ebony shifted at 14 (years early); the secret holds only because Nova hides them both** — not a public power, not a gift, a death-penalty secret. +4. **Ebony's cruelty is a real flaw** — blackmail, scorn, the rampage that gets wives beaten. Sanitizing her into a pure heroine violates the transformation thesis. +5. **Radion is a silver dragon (fire+ice+water), unique among living dragons, hunting rebels who fled Dragos Paradise** — not merely "the strongest dragon." +6. **Nova and Radion are ancient true mates; Ebony↔Greyson flows FROM theirs.** Her rejection blocks but doesn't sever it. +7. **Boris's identity is a deliberate, unresolved mystery (enters Ep 56)** — never confirm/deny Boris = Greyson; the source never resolves it through ch 100. +8. **The prophecy's terms are fixed:** wise queen, two nations made one, reign NOT begun in Allarion. Reference, don't rewrite. + +## Entry map *(tease ok, anchor flags)* +- **The ball** — Eps 13–17 (entry-window climax; anchor-safe). +- **Greyson / Radion** — Ep 4 (Piroria thread; anchor-safe). +- **Banishment + title stripped** — Ep 36. *Anchor flag.* +- **Radion's secret memory-wipe of councilmen** — recounted ~Ep 25; real canon. *Tease as invisible rescue, don't open on it.* +- **Boris (forced husband / mystery)** — Ep 56. *Anchor flag.* +- **Survival journey** (fire-making, catfish, snakebite, Boris starving himself) — Eps 51–91. *Anchor flag.* +- **Aurastar the seer** — Ep 69 (calls Boris "Prince"; he cuts her off). *Anchor flag.* +- **Bella / Lily Training Center** — ~Ep 49. *Different protagonist; anchor flag.* +- **Goliak (rebel-dragon villain via Prince Idris)** — Ep 65. *Setup; tease only.* + +## Engines the opening supports *(all UNTESTED — no shipped PESD promos)* +1. **Forbidden Power / Hidden Identity (strongest fit):** strongest dragon in Allarion, hidden four years, exposure = death; the ball is the catastrophic reveal. +2. **Injustice Engine / System Rigged Against You (very strong):** born female = second-class by law, yet prophesied queen. +3. **Forced Fate / Arranged Marriage:** ball ultimatum → sentenced to marry the first stranger at the gate. +4. **Mate Bond / Destined Love, Refused:** the audience knows Greyson is her true mate; she rejects him and it costs everything. + +## IM sources — opening window +- **"I would rather see a commoner... than a woman. Even my own daughter."** (Ep 1): drives her to the lake and first shift. *Injustice Declaration, T1* +- **Nova reveals herself to 14-year-old Ebony** (Ep 1): pain, the black dragon in the water, the ancient voice. *Power Awakening, T1* +- **King Liam's library command** (Ep 2): pick a husband or be married to the first man at the gate. *Patriarchal Tyranny, T1* +- **Radion's "Princess Ebony is our mate"** (Ep 13): dramatic irony she doesn't know. *Dramatic Irony, T1* +- **Rampage + Nova's "STOP!" forcing the room to its knees** (Ep 16): power erupts; princes humiliated. *Power Revelation, T1* +- **"Pick me" / she flees** (Ep 17): the bond won't let her reject him fully; she runs. *Mate Bond Override, T1* + +*(Dance/forbidden-truth Ep 15; failed auction Ep 20 — see L3 beat ledger.)* + +**Injustice density** *(primary conversion driver):* +- **T1:** A firstborn barred from her own throne for being a woman, in a kingdom that would kill her for the power she already holds. +- **T2:** A father who loves her yet chooses the system — ultimatum, auction, banishment. +- **T3:** The law's asymmetry — a man's affair is "a slap on the wrist," a woman's exposure is death; her rampage gets wives beaten. +- **Drift risk:** Ebony as pure victim. The injustice must coexist with her real cruelty, or the transformation has nothing to transform. + +--- + +# LAYER 2 — RAILS (eps ~20–100) · *load at W1 (threads) + canon gate (limits)* + +## 2a · Conversion Threads +1. **Who is Boris?** — every detail (survival mastery, mountain knowledge, a stocked cabin, a seer who calls him "Prince," a dragon that talks to Nova) contradicts "vagabond," but the source never resolves it through ch 100. Pays off: **never (open through ch 100)**. The single strongest open loop — *initiate the question, never deliver the answer.* +2. **The refused true mate** — the audience knows Greyson is hers; she rejected him and was banished for it; he may be closer than she knows. Pays off: **unresolved through ch 100.** +3. **From tyrant to wise queen** — the prophecy promises it; her breakdown (Ep 84) is the hinge. Pays off: **incomplete through ch 100** (she begins to change; the crown is not won). +4. **Bella's mirror rise** — the servant who kept Ebony's secret becomes a warrior at the Lily Training Center; ascends as Ebony descends. Pays off ~Ep 78+ (still rising at ch 100). +5. **The rebel-dragon war** — Goliak (via Prince Idris) hunts Ebony's ancient dragon; "the realm of man will be under attack." Pays off: **setup only through ch 100** — a ticking long-game, not detonated. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Nova control Ebony.** Ebony is not a Hosento; Nova guides and scolds but cannot command her. (Promote toward HARD BLOCK if a promo's cornerstone is dragon-puppeteering.) +- **The show never makes ancient-dragon power free.** Every loan of strength/healing drains the host; Nova's hiding magic takes concentration she can lose. +- **The show never resolves Boris's identity** (through ch 100). +- **The show never lets Ebony win through redemption-by-apology.** Change comes only through loss of privilege and survival, against her own resistance. +- **The show never frames Piroria and Allarion as long-settled allies** — the peace treaty is recent and fragile. + +--- + +# LAYER 3 → companion: `world_pesd_deep.md` · *on demand only* + +> Full cast, world mechanics (bond system, ancient vs. modern dragons, mate bond, dragon types), geography/ecology, late-game beats, relationship maps, flavor. Pulled only on a canon question, a suspected break, or a W5 deep-dive. + +--- + +**Cross-show contamination:** checked against the `series_worlds.md` index — clean (no shared character/place names with other shows in the index). diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_pesd_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_pesd_deep.md new file mode 100644 index 0000000..3fa6ddb --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_pesd_deep.md @@ -0,0 +1,104 @@ +# PESD — Layer 3 Deep Reference Companion +> On-demand only. Reference-formatted. Source-verified through ch 100; entry-window (Eps 1–20) read line-by-line, Eps 21–100 sampled at major beats. +> **L3 note:** This file holds full cast, mechanics, geography, late-game beats, and flavor. The working doc (`world_pesd.md`, Layers 0–2) is the default load — pull this only on a canon question, a suspected break, or a W5 deep-dive. + +--- + +## Core Cast + +| Character | Role | Key detail (source-grounded) | +|-----------|------|------------------------------| +| **Ebony** (full name: Ebony Antoinette Firestorm, Ep 36) | Protagonist | Firstborn of King Liam; shifted at 14; black eyes are the one tell she can't hide; trained 4 yrs w/ Davin (blackmailed via his affair); convicted of hiding a dragon, blackmail, and treason; stripped of title and banished (Ep 36); married to Boris by decree; carries gems sewn into her dress by Briette/Elsie. | +| **Nova** | Ebony's dragon | Ancient stone dragon; granddaughter of Omari & Mahala; melts sand→glass, dirt→obsidian; created the Blackton Mountains in a past life; hides her presence from all dragons; cannot control Ebony; true mate of Radion from millennia ago. | +| **Greyson** | Male lead / true mate | Heir to Piroria; silver dragon Radion; **shifted at 13** (Ep 11, verbatim: "I was thirteen"); 19 at the ball; came to Allarion at Radion's urging; took Bella as a ward to protect her; later at the cabin "enjoying his solitude" (Ep 97), referenced as separate from Boris. | +| **Radion** | Greyson's dragon | Only living silver dragon (fire+ice+water); sent from Dragos Paradise to stop rebel ancient dragons; Nova's true mate; secretly wiped councilmen's memories of Nova's power via their sleeping dragons (recounted ~Ep 25); commanded all dragons to refuse to claim Ebony. | +| **Boris** | Ebony's forced husband / mystery | Arrived dressed as a merchant, left the inn dressed as a beggar (Ep 65) — i.e. deliberate disguise; military deserter cover story; deep survival/mountain knowledge; stocked cabin in Piroria's mountains; his dragon communicates with Nova and gives flight directions; Aurastar calls him "Prince," he cuts her off (Ep 69). **Shifting age never stated in source.** Identity unresolved through ch 100. | +| **King Liam** | Antagonist (institutional) | Golden dragon Adonis; signed the Piroria treaty; terrified of the prophecy; loves Ebony but chooses the kingdom; full name Liam Bynum Firestorm (Ep 36). | +| **Queen Briette** | Secret ally / mother | Dragon Alondra; secretly common-born from Arkana (sheep-herder parents); Auraborn prophesied she'd mother a great queen; covertly schooled Ebony at the Royal Dragon Academy; smuggled gems and supplies. | +| **Prince Edwin** | Antagonist (sibling) | Dragon Magnus; parrots his father's misogyny; suggested bribing nobles to take Ebony off Liam's hands (Ep 20). | +| **Bella** | Parallel protagonist | Ice dragon **Laurel** (light blue, silver sheen, rare); palace servant who kept Ebony's secrets; recruited by Greyson; at the Lily Training Center; cannot read (learning); attacked by Sashine (Ep 78). | +| **Davin** | Antagonist (personal) | Knight in the King's army; affair with Captain Karakul's wife Miriana; dragon Tipton; trained Ebony under blackmail; she breaks his nose (Ep 26); testified at her trial. | +| **Elsie** | Complicated ally | Ebony's elderly, fearful nanny; testified about Ebony (blackmail/threats of dismissal confirmed); but smuggled food, gems, and arranged Briette's secret visit. | +| **Aurastar** | Seer | Daughter of the original seer Auraborn; golden hair to her knees; ethereal, no dragon (seers are never gifted dragons); received her gift after Nova was revealed; tells Ebony her destiny is "intertwined with the Silver Dragon" and "things are not as they seem" (Ep 69). | +| **Prince Idris** | Antagonist (geopolitical) | Heir of Dragos; short, round, balding, infamous green frilly suit; dragon Goliak; manipulated toward continental conquest; hunting Ebony. | +| **Goliak** | Primary villain dragon | Ancient rebel dragon from Dragos Paradise; muted his presence at the ball to avoid Radion; using Idris as a puppet; searching for Ebony's ancient dragon. | +| **Captain Geralt** | Ally (institutional) | Captain of the King's Guard; escorted Ebony out; "you will always be Princess of Allarion to me." | +| **Cason** | Liam's chief advisor | Posed as a doorman/servant at the ball to spy on dignitaries; managed the council proceedings. | +| **Lord Lyndon** | Head councilman | His dragon fought Radion's command; he stuttered out "Banishment" (Ep 36), making the verdict non-unanimous and sparing Ebony's life. | + +> **Naming caution from source:** Idris's father is called **King Rickon** in some passages and **King Radek** in others (source inconsistency). Bella's training-center peers and the orphan recruit appear under variant spellings (e.g. "Ingrid"/"Sigrid", "Kae"). Standardize per the latest/most-frequent source spelling and flag if load-bearing. + +### Piroria / situational cast +King Ayaan (Greyson's father, fair ruler, raspberry tea bearer of bad news), Prince Chaim (sickly younger brother; dragon Leon), Romid (uncle / chief advisor; dragon Bedago), Eliaster (best friend / security; dragon Arlio; comic relief), Lytle (cousin; commands Fort Ludar; co-discoverer of the cabin), Prince Duro (Green Isles; Ebony's old crush who ignored her), Prince Tye (Arkana; nose twisted at the ball), Prince Adrian (Cypher; drunk, shoved over), Prince Kern (Lari; pockmarked), King Beriod (Lison; ~40, widowed, lecherous, ~many illegitimate sons), Kara (head of Lily Training Center; green earth dragon Mya), Birdie (Bella's squad leader; teaches her to read), Ria (Bella's friend), Sashine (training-center antagonist; dragon Starlight; brutally beat Bella in a fake "demonstration," Ep 78; her dragon's aura unsettles Laurel — possible rebel-dragon tie). + +--- + +## World Mechanics + +### Dragon bond system +- Everyone bonds a dragon at puberty: women in Allarion ~18, men earlier (Greyson at 13). Shifting young signals an exceptionally strong dragon. +- First shift is agonizing (bones stretch, scales/claws/horns form); afterward it's effortless — release a thought and the dragon takes over. +- The dragon lives in the human's mind; telepathy both ways; the human can see through the dragon's eyes. Dragons can lend strength, speed, sight, hearing, healing — each loan costs energy. +- Humans hear only their *own* dragon's side of any dragon-to-dragon conversation; another dragon's actual voice would knock a human unconscious (too deep/low-frequency). + +### Ancient vs. modern dragons +- **Modern dragons:** created from Dragos Paradise essence, gifted at puberty as blank slates; develop abilities via training. +- **Ancient dragons:** arrive with memory, personality, and full magic intact; chose or were sent to bond a host. Lost abilities include: hiding from other dragons, private dragon-to-dragon channels, erasing/altering human memory through sleeping dragons, sensing a true mate at distance, multi-element breath, healing through the host, building with fire. +- **Hosento** = ancient term for a human host ("sent host"); in ancient times dragons controlled hosts — reversed in the modern era. Ebony is notably *not* a controllable Hosento. + +### Mate bond +- Dragons mate once, forever; the bond persists across death and lifetimes. The human bond flows from the dragon bond. Both dragons AND both humans must accept it; a dragon cannot force it. Ebony's refusal blocks (not severs) the Nova–Radion / Ebony–Greyson bond. Artificial (non-true) mate bonds are inferior — "the dragons make the best of it." + +### Dragon types +- **Stone (Nova):** rarest fire subtype; line discontinued by the dragon gods for its destructive power; melts stone to obsidian. +- **Silver (Radion):** fire+ice+water; only one alive; would die if gifted as a modern dragon (taught only one of three elements). +- **Others:** Gold/Red (common fire, Allarion royal line, Liam's Adonis), Ice/Blue (rare in Allarion, Bella's Laurel is light blue), Green/Earth (Kara's Mya), Gray (fast, weak in magic), Orange (weak fire). + +--- + +## Geography +- **Allarion:** clifftop castle over Lake Halua (in a crater, one highway); city of Halua in the Valley of Denton by the River Gil Oris; primarily fire dragons; women's dragons typically half the size of men's; codified anti-women laws. +- **Piroria:** capital Burking; Lake Taconomi (Radion's hidden underwater cave); the Lily Training Center (women's military training, named for Queen Lillette); Fort Ludar (last outpost before the border, Lytle commands); the hidden cabin in the mountains. +- **The mountains / Shepherd's Trail:** between the kingdoms; features Childers Pass, an ancient dragon-magic rope bridge. +- **Dragos:** Idris's mountainous, resource-poor kingdom; economy = mohair + tourism to the ancient dragon caves of Soya (the first home of all dragons). Goliak's intended launchpad for conquest. +- **Green Isles** (Duro/King Ferric; naval trade), **Arkana** (Tye; Briette's secret birthplace), **Cypher** (Adrian; shipping ports), **Lari** (Kern), **Lison** (Beriod; Allarion's closest ally, treats women worse than Allarion). +- **Dragos Paradise:** the dragons' afterlife; rebels who craved power were forbidden to return but came anyway; Radion volunteered to hunt them; leaving causes memory haziness (Nova can't recall if she chose to come or was sent). + +--- + +## The Prophecy (verbatim parameters, Eps 1 + 39) +Spoken publicly by the seer Auraborn at Ebony's birth: she will be "powerful and brave" and "the first female ruler of Allarion." Told privately to Queen Briette later: (1) she will rule over **two nations that join and become one**; (2) her reign will **not begin in Allarion**; (3) the **realm of man will be under attack** as she ascends; (4) her journey to destiny will be hard. King Liam forbade the prophecy from being spoken. Auraborn also prophesied over Briette as an infant — that she'd mother a great queen. + +--- + +## Late-game beat ledger (sampled, with ep numbers) +- **Davin confrontation / broken nose** — Ep 26. +- **Ebony before the council; five death votes, Lyndon's forced "Banishment"; title stripped** — Ep 36. +- **Briette delivers the full prophecy; reveals her common birth; gems stripped from the blue gown** — Ep 39. +- **Radion's memory-wipe of councilmen recounted** — ~Ep 25. +- **Survival journey:** rats/straw servant house (~Ep 51), "Can you pick up sticks?" (~Ep 52), catfish caught with bleeding fingers (~Ep 53), Boris starves himself feeding Ebony / collapses (~Eps 70+), snakebite + Nova too weak to heal (~Ep 58 / "Viper"). +- **Boris arrives / forced marriage** — Boris first seen ~Ep 56; the disguise (merchant→beggar) confirmed Ep 65. +- **Goliak's conquest plot via Idris** — Ep 65 ("One day, we will be the richest rulers in all the world"). +- **Aurastar in the storm cave; calls Boris "Prince"** — Ep 69. +- **Sashine's "demonstration" assault on Bella** ("I want you to help me demonstrate some moves"; roundhouse to the knee; broken nose) — Ep 78. +- **Ebony's breakdown** ("I can't do this anymore. I messed everything up. I messed up my destiny") — Ep 84. +- **Nova carries Boris; Bella's audience prep; "Princess Ebony is safe"** — Eps 91–97. + +--- + +## Flavor notes +- The ball is the injustice engine made spectacle: each prince is a flavor of patriarchal entitlement (Beriod predatory, Idris incompetent, Tye well-meaning-but-complicit, Duro honest-but-dismissive, Adrian indifferent-drunk). Greyson is the lone equal — and she rejects him. +- Nova is on Ebony's *destiny's* side, not Ebony's side: she scolds, withdraws, withholds help when Ebony is cruel. The "I chose you / you are not yet worthy of it" tension is the internal engine. +- The domestic-incompetence material (fire, fish, water, skinning) is comedy and tragedy at once — privilege made visible by its absence. +- The gems sewn into Ebony's dress are her only material lifeline and her mother's love made tangible — a trackable resource. +- The rebel-dragon threat (Goliak; Sashine's suspicious dragon; "other like-minded dragons" not yet found) is the long-game that will eventually force the personal conflicts into alignment — still in setup at ch 100. + +--- + +## Corrections applied from source (vs. prior world_pesd.md) +- **REMOVED "Ebony pinches her nanny to bruises / draws blood" (fabricated).** Source supports only blackmail and threats of dismissal against Elsie (Ep 1: "I could go to my father and say I want a new nanny... Keep quiet"). No physical violence against Elsie appears in the source. +- **REMOVED "Boris shifted at 13 (same age as Greyson)" (zero source support).** Source confirms only Greyson shifted at 13 (Ep 11). Boris's shifting age is never stated across Eps 1–100. His "white teeth after shifting" detail is not used here as identity proof. +- **Chapter→Episode renumbering.** The prior doc's "Ch" numbers were unreliable. Source episode anchors: ball begins Ep 13; rampage Ep 16; banishment Ep 36; prophecy delivered Ep 39; Boris seen ~Ep 56; Goliak Ep 65; Aurastar Ep 69; Sashine attack Ep 78; breakdown Ep 84. +- **King Liam's Ep 1 line is "commoner," not "vagabond"/"lowest vagabond":** "I would rather see a commoner sit on the throne than a woman." (The "prince, merchant, or vagabond" phrasing belongs to the marriage decree, Eps 2/36.) +- **Rampage refrain is "I. WILL. NOT. HAVE. YOU."** (first person), not "I will not have her." +- **Idris's father:** source names him both "King Rickon" and "King Radek" — flagged inconsistency, not a settled fact. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rbm.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rbm.md new file mode 100644 index 0000000..cbecebf --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rbm.md @@ -0,0 +1,120 @@ +# RBM — Rise of the Beastmaster — Series Worlds Entry + +> **Opening anchor:** first 5 min (the anniversary trap) / first 5 eps (Blazehollow disgrace + the chick hatches) / first 20 eps (the one-month wager, Red Twill Tor). **Source verified through:** ep 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_rbm_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 from a close read of eps 1–20; Layer 2 + canon limits sampled across eps 20–100. All engines UNTESTED (no promos shipped). + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) + canon gate (limits). Layer 3 is on demand. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **Stolen Future / Triple Betrayal** *(Thruline)* +2. **Star Rating = Social Destiny** +3. **The God-Tier Beast That Looks Like a Chicken** + +## Protagonist — Jasper Cooke +**Identity.** A prodigy beastmaster betrayed at 18: his lover Lydia framed him as a predator and handed his stolen treasure (a Saintbeast Battle Soul) to the noble Niall Redfern, who killed his beast Midas and took the credit. Three years on — disgraced, disowned, mother dying — an egg hatches: a one-star chicken secretly a Primordial Chaos Beast. The engine is the gap between what everyone thinks he is (a ruined predator) and what he actually carries. Revenge/Justice Denied on Underdog Awakening. +**Combat.** Fights with his own body and a knife (Scarlet Vein Knife) on speed, precision, assassination timing — never brute force. Wins by type advantage (fire means nothing to his phoenix), a precise strike, or borrowed strength. Always outranked going in. +**Power Source.** Beastblood cultivation re-started from zero after Midas died, refined through Felix's phoenix bloodline — far faster than academy method. Limits: Felix is a one-star chick, evolves to 6-star only after manna (~ep 26); his nature is secret. The left arm is a black-scaled beast claw with a red third eye ("Maze Gazer," projects illusion) — origin UNRESOLVED. Eats spirit gems/herbs raw via fire resistance. +**Voice.** Dry, deadpan, controlled fury under a calm surface. Banters with Felix; tender with his mother; meets nobles with cold courtesy that curdles into contempt. Not a swaggering hero — a man who already lost everything and is done flinching. + +**Voice Samples (verbatim — never paraphrase):** +1. "You were supposed to fly with me. You were supposed to stay." (Ep 2) — grief, to dying Midas +2. "I've just stopped letting people like you think you can spit on us and get away with it." (Ep 6) — cold defiance +3. "I'd rather be crushed standing up than crawl out of town." (Ep 7) — resolve +4. "My past is my own. I don't toss it aside when it no longer suits me." (Ep 11) — to his half-brother +5. "Not dead yet, brother." (Ep 13) — deadpan, blade at Albie's throat + +**Drift tripwires.** Wins through raw power | reveals Felix's god-tier nature publicly | Felix shown as already huge/powerful | resurrects Midas | portrays Lydia sympathetically | resolves the cure / the arm / the false reputation. + +## Setting — Entry-Window World (Blazehollow) +**Feel.** A small southern-marches town where star ratings sort your life and the governor's family rules. Jasper grew up in the grandest house on the estate, Rainlovers' Terrace — until he's disowned by letter on his mother's birthday and swept out "like unwanted furniture." Home becomes a ramshackle edge-of-town cottage; the town treats him as a cautionary tale and his half-brother Albie as the new golden boy. Beyond: Red Twill Tor, a brutal hill-forest of wildbeasts and rare spirit herbs. + +**Sensory Samples (verbatim):** +1. "Her hair had turned white. Her skin had thinned and faded… Her Four Winged Goldroc lay just beyond the doors… half bare, its feathers fallen away, its breathing shallow and uneven." (Ep 4) +2. "It was a tiny yellow chick. It stood in the middle of the broken shell, fluff sticking out in every direction." (Ep 3) +3. "The skin on his left hand began to turn black… flesh shifted and hardened into black scales… each one a flawless hexagon catching the candlelight with an oily sheen." (Ep 9) + +**Drift tripwires.** Blazehollow as a fair meritocracy | Jasper's reputation as recoverable | the cottage as cosy rather than fallen | star ratings as soft guidance rather than hard social destiny. + +## Tone Constraint +Injustice-driven revenge underdog, not a flex. Jasper's edge is hidden and his shame is public; if a beat lets him simply overpower opponents or skips the triple betrayal + dying mother, empathy collapses and it reads as a power fantasy. The comedy (Felix's banter) is a release valve, never the lead. + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +A storm; a flight home for an anniversary. Lydia lures Jasper in, then turns: "I nearly ended up trapped with you… You're not what I want." She tears her own dress and screams for rescue as Niall Redfern descends on a three-eyed lightning eagle and casts Jasper as her attacker — "your lifebound beast will die." Midas fights, is overloaded, and dies throwing his body across both Jasper and the treacherous Lydia. Niall seizes the Saintbeast Battle Soul from the dying Goldroc and flies off with Lydia. Final bond-pulse: "Jasper. Safe." Triple betrayal — romantic, violent, parental — in one scene. + +## First 5 episodes *(the first sitting)* +Three years later in Blazehollow. Jasper is disgraced; his mother Freya is dying of an ageing curse (40, looks 80). One of ten secret eggs in his Vitalbound Expanse hatches: a tiny talking yellow chick — the Everblaze Inferno Phoenix, a Primordial Chaos Beast, shown as one star that explodes into a starscape only Jasper sees. The governor's third wife Lois delivers divorce papers on Freya's birthday; the two are disowned and evicted. Jasper humiliates half-sister Sophie and her Flaming Hawk using only the chick, then they leave with their heads high. + +## First 20 episodes *(texture band)* +The selection is in ten days, on the governor's wedding to Cora Pennington of Thunderbolt Hall. Jasper's left arm transforms into a black claw with a third eye (ep 9). He crashes the selection, breaks half-brother Albie publicly, then is blocked by Cora's brother Euan (15, five-star Lightning Bolt Cheetah) — stakes a one-month rematch: the Order of the Amber Flame against his life. He heads to Red Twill Tor for his mother's medicine (clear spirit grass) and the manna Thunderbolt Hall hunts; meets Maisie Denholm and Princess Elowen Pryce there. Steals the manna; Felix purifies it and evolves to 6-star (~ep 26). + +## HARD BLOCKS *(opening-binding)* +1. **Felix is a one-star yellow chick secretly a Primordial Chaos Beast (Everblaze Inferno Phoenix); his true nature is a total secret no character knows.** The star orb reads only the surface six stars; revealing his god-tier nature publicly breaks the core engine. +2. **Jasper's Vitalbound Expanse holds 10 eggs; only ONE (Felix) has hatched through ep 100.** The other 9 are dormant; do not hatch additional beasts. +3. **Felix evolves to 6-star only after manna purification (~ep 26); not before.** Even at 6-star his bloodline is only partly unlocked. +4. **Midas (5-star Goldroc) is DEAD — killed by Niall in ep 1; cannot be resurrected.** +5. **The Saintbeast Battle Soul was Jasper's discovery, stolen by Niall via Lydia's betrayal, now credited to Niall.** Ownership unresolved through ep 100; Niall has not fully mastered it (it's unstable). +6. **Lydia's betrayal was premeditated and remains so — never portray her sympathetically.** She framed Jasper, handed the Soul to Niall, and places an assassination bounty via Bloodflower Parlour (~ep 47-49). +7. **Freya's lifesbane curse: 40, looks 80, ~six months to live.** Cure requires the head of the Skyward Reliquary / Cloister — her estranged father, **Duncan Ashdown**, who cut her off 20 years ago. +8. **Jasper's left arm is a black-scaled beast claw with a red third eye; origin mysterious and UNRESOLVED through ep 100.** Linked to the dark shadow that hunted Felix in the hatching vision. +9. **Jasper's false reputation (drug-using predator) persists.** Load-bearing — it drives institutional rejection throughout. + +## Entry map *(tease ok, anchor flags)* +- **Felix's true Primordial Chaos nature** — known only to Jasper from ep 3; never publicly. Opening *may* anchor the secret. +- **The black arm / third eye** — ep 9; its Maze Gazer illusion power — ~ep 26. +- **Manna evolution to 6-star** — ~ep 26. Opening may tease, not anchor as starting power. +- **Move to Pyreborough / Amberbourne, the Cloister, Inner Sanctum** — ~ep 37–39. +- **Grandfather = Duncan Ashdown revealed** — to Jasper ~ep 70; publicly ~ep 96. **Flag:** the *identity* is NOT secret through ep 100; only the *cure* stays unresolved. +- **Lydia's assassination bounty (Bloodflower Parlour)** — ~ep 47–49. + +## Engines the opening supports +1. **Revenge / Justice Denied (UNTESTED, STRONGEST):** triple betrayal + stolen achievement + false reputation — a wound demanding repayment. +2. **Underdog Awakening (UNTESTED):** disgraced exile, dead beast, a "one-star chicken" — every win looks impossible from outside. +3. **Secret Power / Hidden Beast (UNTESTED):** Felix looks like a chicken, IS a god-tier Primordial Chaos Beast; nobody knows. +4. **Bond / Family Loyalty (UNTESTED):** dying mother, ticking clock, the cure as the prize behind the revenge. +5. **Institutional Injustice (UNTESTED):** star ratings as social destiny; nobles untouchable; the framed reputation sticks. + +## IM sources — opening window +- **Lydia's reveal + the trap** (Ep 1): "You're not what I want." *Romantic Betrayal, T1* +- **Midas dies shielding Jasper and Lydia; "Jasper. Safe."** (Ep 2): *Sacrificial Death, T1* +- **Niall steals the Saintbeast Battle Soul from the dying beast** (Ep 2): *Stolen Achievement, T1* +- **Divorce papers on Freya's birthday; disowned, evicted** (Ep 4–5): *Family Abandonment, T1* +- **Freya dying of the ageing curse** (Ep 4): *Ticking-Clock Devastation, T1* +- **Public framing as predator; town disgrace** (Ep 3): *Institutional Injustice, T2* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** in one night a loyal young man loses everything — his lover frames him, the noble kills his beast-brother and steals his treasure and the credit, and he's branded a predator. +- **T2 (supporting):** disowned by letter on his dying mother's birthday; the replacement son paraded; her cure sits behind a door slammed by her own father. +- **T3 (deepening):** the system is rigged — star ratings fix your worth, Thunderbolt Hall is untouchable, the false reputation can never be cleared. +- **Drift risk:** lead with the chick/phoenix reveal and skip the triple betrayal + dying mother, and it reads as a flex, not an injustice. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **The stolen Saintbeast Battle Soul** — Niall wears Jasper's prize and his story; the Soul is unstable and unmastered even after three years. Pays off deep (unresolved through ep 100). Sell the theft, never deliver the reclamation. +2. **The cure behind the locked door** — Freya's only hope is her estranged father, the Grand Master who cast her out 20 years ago and refuses to help (~ep 70). Pure faith-against-a-shut-door. Initiate the race against her clock; never deliver the cure. +3. **The one-month wager** — the Order of the Amber Flame against Jasper's own life vs Euan. Pays off ~ep 32–36. Sell the impossible stakes; withhold the outcome. +4. **The mystery of the black arm + the shadow** — the claw and third eye match the shadow that hunted Felix and "killed" him in a past life. Unresolved through ep 100. Tease, never answer. +5. **Maisie's sealed powers + strange recognition** — ten sealed abilities (two unlocked), perfect sync with Jasper, a sense they've met before; origin unsolved. Tease the bond, never explain her. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Felix simply overpower opponents through size** — early wins are type advantage (fire-immune phoenix), the black arm, precision, or borrowed strength (Maisie's sync), never raw scale. +- **The show never reveals Felix as a god-tier beast in-world** — the star orb only ever reads six stars; the Primordial Chaos truth stays Jasper's secret. +- **The show never clears Jasper's name or resolves the cure within the opening window** — both stay load-bearing, open wounds. +- **The show never makes Lydia a victim** — her betrayal was premeditated and she escalates to a kill-bounty. + +--- + +# LAYER 3 → companion: `world_rbm_deep.md` · *on demand only* + +**Cross-show contamination:** checked against `series_worlds.md` — RBM and **WBT** are both beast/academy underdog shows; keep distinct. RBM = **Jasper** + secret god-tier phoenix **Felix** (one-star chick) + a mysterious black beast-arm, driven by revenge over a triple betrayal; WBT = **Ren** + a knowledge-granting **spore**. Don't let Jasper/Felix/the black arm bleed into WBT or vice versa. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rbm_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rbm_deep.md new file mode 100644 index 0000000..6399b65 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rbm_deep.md @@ -0,0 +1,118 @@ +# RBM — Rise of the Beastmaster — Layer 3 Deep Companion + +> On-demand Layer 3 only. Not in the default build path — pulled for canon questions, W2/W3 canon-break checks, or a W5 deep dive. All facts trace to the eps 1–100 source. Reference-formatted; scan, don't read. + +--- + +## Full Cast + +### Core +| Character | Role | Key detail (source) | +|---|---|---| +| **Jasper Cooke** | Protagonist | 18 at the betrayal (ep 1), ~21 in the present (ep 3). Former Amberbourne prodigy (won the Order four years prior, 5-star Goldroc Midas). Disgraced, disowned, false predator reputation. Vitalbound Expanse holds **10 eggs** (only Felix hatched). Left arm = black-scaled beast claw with a red third eye (Maze Gazer). Re-builds Beastblood from zero; reaches Spiritsource by the capital arc. Fights with the Scarlet Vein Knife + Bloody Soul Hunt. Secret grandson of Duncan Ashdown. | +| **Felix Beaumont** | Lifebound beast / comic foil | The **Everblaze Inferno Phoenix**, a **Primordial Chaos Beast** — appears as a tiny talking yellow chick. Hatched ep 3. Speaks aloud (rare). Knows little of his own nature ("I was born five minutes ago"). Hunted by a vast dark shadow across lives. Eats spirit gems/herbs whole. Evolves to **6-star** via manna (~ep 26); bloodline only partly unlocked. Named by Freya (ep 17): "Felix means good fortune, Beaumont means beauty." Lovesick — falls "in love" with most powerful/beautiful beasts and women he meets. | +| **Freya Ashdown** | Mother / emotional anchor | 40 but looks ~80 from **lifesbane** (a curse, not ageing): white hair, thinned skin, ~6 months to live; her Four-Winged Goldroc decays with her. Once the Governor's celebrated first wife; "a backbone of steel." Cure lies with the head of the Cloister — her estranged father. Cut off from Ashdown Manor 20 years ago for leaving with Archie. Disowned by letter on her birthday (ep 4). Names Felix; quietly proud of Jasper. | +| **Midas** | Dead beast-brother | Jasper's original lifebound beast: a 5-star **Four-Winged Goldroc** (bronze-gold). Hatched beside Jasper 18 years prior; "his brother." Carried the just-found Saintbeast Battle Soul. Overloaded by Niall's eagle, dies (ep 2) shielding both Jasper and Lydia. Final bond-pulse: "Jasper. Safe." Niall plucked out his feathers post-mortem to extract the Soul (the Soul refines into spiritsources on the feathers). **Dead — cannot return.** | + +### Antagonists & nobility +| Character | Notes | +|---|---| +| **Niall Redfern** | The thief. Amberbourne's brightest star, Skyward Directorate, heir to Thunderbolt Hall (seat of regional power, Vermillion Clan). Three-eyed purple Lightning Eagle. Killed Midas, stole the Saintbeast Battle Soul, took the hero's credit. Has not fully mastered the unstable Soul even after 3 years. The primary revenge target. | +| **Lydia Saxson** | The betrayer. Jasper's lover of one year; premeditated seduction → frame as predator → handed the Soul to Niall. Rose at Pyreborough's Skyminster Sanctum / Skyward Reliquary alongside Niall. Places an assassination bounty on Jasper via Bloodflower Parlour. **Never sympathetic.** | +| **Governor Archie Cooke** | Jasper's father. Cold, ambitious, image-obsessed. Disowns Freya and Jasper by letter; marries Cora Pennington of Thunderbolt Hall to climb. Names Albie heir, then backs outsider Euan. Vermillion-bird-level beastmaster. | +| **Cora Pennington** | Archie's new (third→official first) wife, of Thunderbolt Hall. Beautiful, calculating; married Archie to advance her brother Euan. Watches Jasper with cold interest. | +| **Euan Pennington** | Cora's brother, ~15, of Thunderbolt Hall. 5-star **Lightning Bolt Cheetah**, 9th-level Beastblood. Witnessed Midas's death 3 years prior. Takes the Order of the Amber Flame from Jasper, then bets it (vs Jasper's life) on a one-month rematch. Vastly stronger at first meeting. | +| **Albie Fenwick** | Jasper's half-brother (3 yrs younger), Blazehollow's golden boy, Archie's named replacement heir. 7th-level Beastblood, 5-star **Purple-Eyed Bright Bird**. Publicly broken by Jasper at the selection (ep 12–14). | +| **Sophie / Lois Hathley** | Half-sister + her mother (Archie's third wife). Sophie: arrogant "fifth-rank prodigy," **Flaming Hawk** "Lancelot." Humiliated by Felix in the garden (ep 6–7). Lois delivers the divorce papers; later sidelined by Cora too. | +| **Phoebe Redfern** | Niall's sister, ~15, twin beastmaster (high-tier 6-star Tri-Coloured Darkthunder Bird + Vajra Berserk Ape), Spiritsource level 3. Stormfell Manor. | +| **Leo Noble** | Capital rival; Flora Blackwood's spoiled son. High-tier 6-star **Gilded Lion**. Beaten by Jasper in the ranking test (Jasper takes prime-disciple spot). | +| **Gemma / Rhys Ashdown** | Jasper's cousins at Ashdown Manor (Inner Sanctum). Gemma = the Headmaster's daughter; both look down on Jasper, then learn he's their cousin. Antagonistic gatekeepers to the grandfather/cure. | + +### Allies & capital figures +| Character | Notes | +|---|---| +| **Maisie Denholm** | The Vermillion Bird Emperor's **goddaughter** ("Princess Maisie," number-one beauty). Found as an infant in the **Abyssal Battlefield**; born with **no lifebound beast** but **10 sealed abilities** (origin an unsolved mystery). Has a **perfect/complete sync** with Jasper and an inexplicable sense she's known him. Unlocked abilities: (1) **Spiritual Attachment** — becomes spiritual form, attaches, boosts power up to a full stage; (2) **Timespan Meadow / Temporal Field** — small-area control of time-flow (affects opponents only); (3) **Astral Pinions** — wings of light granting flight (unlocked in the capital arc). Love interest. | +| **Princess Elowen Pryce** | The **Sixth Princess**, of the Vermillion Bird Fellowship. Spiritwell beastmaster; **6-star Vermillion Bird** bloodline. Fierce, protective of Maisie; mistaken by Jasper for her servant. Gives Jasper her jade pendant as protection in Red Twill Tor. | +| **The black-robed stranger** | Visits Jasper's room (ep 39); knows the true betrayal and that the Saintbeast Battle Soul is Jasper's. "An old friend of your mother's"; features trace of Leo Noble — strongly implied to be **Harvey Blackwood**. Gives Jasper a power-traced crimson gem (one-time SOS). Cannot act openly. | +| **Harvey Blackwood (Sage)** | One of the "Starry Twins/Sages" (with Edwin Reed), risen from nothing to rival Thunderbolt Hall; Reed & Noble Trading House. **Once in love with Freya.** His wife Flora is poisonous to her. Lends Jasper money; rescues Freya from a Bloodhell-poison attack. | +| **Flora Blackwood** | Harvey's wife, Leo's mother; performs kindness toward Freya while relishing her downfall. | +| **Esme Penley** | Jasper's Head Tutor at Amberbourne (capital). Teasing, lazy-glamorous, but principled; the first person in 3 years to guess the Saintbeast-Soul truth and quietly offer help. Warns Jasper not to let revenge ruin his cultivation. | +| **Duncan Ashdown** | **Jasper's grandfather** (SECRET early; revealed to Jasper ~ep 70, publicly ~ep 96). Head of the **Inner Sanctum** / Headmaster of The Cloister (Skyward Reliquary). Cast Freya out 20 years ago; refuses to cure her — "basically signing Freya's death warrant." | +| **Colson Garside** | Deputy Headmaster / next Headmaster of The Cloister, chosen by Duncan; another man who once loved Freya. Looks out for Jasper. | + +--- + +## World Mechanics + +### Geography (two phases) +- **Phase 1 — Blazehollow (eps 1–~36):** small southern-marches town under Governor Archie Cooke. Rainlovers' Terrace (the estate), Eastwind Spire/Square (the selection arena), the edge-of-town cottage, and **Red Twill Tor** (brutal hill-forest; spirit herbs, wildbeasts, Kingfisher Lake). The listener entry point. +- **Phase 2 — Pyreborough / Amberbourne (eps ~37–100):** the capital + **Amberbourne College/Institute** (Phoenix Court, Phoenix Tor, Everwake/Everwake Lake, the Penley set). Elite tiers: the **Skyward Reliquary** (a.k.a. The Cloister), and the **Inner Sanctum** above it (Duncan Ashdown's seat; the cure lives here). The Skyward Directorate is the school's uppermost division. Ashdown Manor, Thunderbolt Hall, Stormfell Manor, the Vermillion Bird Fellowship sit in the capital's power web. + +### Beastmaster cultivation +- Every person on the **Saffronreach Continent** has a **Vitalbound Expanse** — the inner space where the lifebound beast's egg forms (normally hatches ~a week after birth). Jasper's anomalously holds **10 eggs**. +- **Tiers:** **Beastblood** (9 levels; master + beast each link 9 beastblood points into a circuit, refining spirit energy into **Beast Essence**) → **Spiritwell** → **Spiritsource** (stores far more energy; the number of spiritsources formed = the beast's star count, e.g. a 6-star beast → 6 spiritsources each) → up toward **Vermillion-bird level**. +- **Star ratings:** newborn lifebound beasts show stars in the eyes = **potential**; wildbeast stars = current strength. 1-star = common/weak; 5–6 star = elite; further split into low/mid/high tier. Star rating ≈ social destiny. +- **Battle arts** split into martial (human) + bestial (beast) skills, sharpened by the bond. Five ranks: **Beast → Source → Concord → Heavenly → Saint.** + +### Manna +- A "divine gift made solid" (stone/crystal/liquid). When matched to a beast's type it triggers **evolution**, raising star level + the master's ceiling. Four grades: **royal (lowest) → profound → terrestrial → celestial** (also rendered as imperial/royal). Even the lowest can push a beast toward 7 stars (a "Royal Beast"). Source unknown. + +### Spirit ore / herbs +- Spirit energy saturates the world; stone becomes **spirit ore/gems**, plants become **spirit herbs**, both marked by **heavenly patterns** in nine colours: **red (lowest) · orange · yellow · green · blue · indigo · violet · black · white (rarest).** Gems are condensed energy, traded as currency and used to cultivate. +- Jasper can eat gems/herbs **raw** (fire resistance from the phoenix bond) for the full charge, then refine via the **Evernight Embers Tome / infernalsource** — far faster than orthodox academy technique (the Darkgold Technique). + +### Felix — the Primordial Chaos Beast +- One of the **Primordial Chaos Beasts**; true form the **Everblaze Inferno Phoenix**. The star orb cannot read his real bloodline — it shows only the surface (one star pre-manna, six post-manna); "each star was like a whole galaxy." Manna only "loosens his bloodline shackles" — full restoration needs far more. +- Unusual: despite 6 stars, he grants Jasper only **a single spiritsource** (not six), formed at Jasper's core. +- Fire is meaningless to him — the structural edge in early fights (vs Sophie's Flaming Hawk, Albie's Purple-Eyed Bright Bird). + +### The black arm / third eye (UNRESOLVED) +- Transforms ep 9: skin to black hexagonal scales, nails to crimson talons, palm splits into a **third eye** Jasper can see through. Matches the **dark shadow** that hunted Felix in the hatching vision ("master of all primordial chaos and rebirth"). Properties: monstrous strength, armour-like defence, near-instant healing. +- Houses a **spirit core** that later accepts the **Maze Gazer** illusion technique (~ep 26): 81 illusion spirit veins form inside the eye; projects **desire**, not fear (freezes opponents with an irresistible image). Origin and meaning unresolved through ep 100. + +### The Saintbeast Battle Soul +- Found by Jasper/Midas in the **Abyssal Battlefield** ~3 years prior. Saint beasts sit at the peak of lifebound evolution; their **battle souls** form centuries after death (a change in the beast soul), carry little resentment, and can be guided into a beastmaster's spiritsources for an "amazing" ability — but the soul is **unstable** until fully refined. +- Midas had barely begun absorbing it (refining into the spiritsources on his feathers) when the betrayal struck — which is why Niall could seize it at all, and why he **plucked Midas's feathers** to extract it. Niall has likely **not** fully mastered it even after 3 years. + +--- + +## Maisie's sealed abilities (tracker) +| # | Ability | Effect | Unlocked | +|---|---|---|---| +| 1 | **Spiritual Attachment** | Spirit-form attach; boosts host power up to a full stage; "perfect sync" with Jasper | Pre-meeting | +| 2 | **Timespan Meadow / Temporal Field** | Small-area control of time-flow; affects opponents only | Pre-meeting | +| 3 | **Astral Pinions** | Wings of light; flight; complete sync with Jasper | Capital arc | +| 4–10 | *Sealed* | Unknown | — | + +--- + +## IM sources by arc (type · tier) +- **The betrayal (Ch 1–2):** Lydia's reveal/trap *(Romantic Betrayal T1)* · Midas dies shielding both, "Jasper. Safe." *(Sacrificial Death T1)* · Niall steals the Saintbeast Battle Soul + the credit *(Stolen Achievement T1)* · Jasper branded the villain *(False Reputation T1)*. +- **Disgrace & disowning (Ch 3–7):** the chick hatches (secret god-tier) *(Hidden Hope T1)* · divorce papers on Freya's birthday, evicted *(Family Abandonment T1)* · Freya dying of lifesbane *(Ticking Clock T1)* · Sophie/Lois humiliation reversed *(Status Inversion T2)*. +- **The selection (Ch 10–16):** Albie paraded as heir *(Erasure T2)* · Jasper breaks Albie publicly *(Underdog Win T1)* · Euan blocks him, life staked on the one-month wager *(Impossible Stakes T1)*. +- **Red Twill Tor (Ch 17–30):** clear-spirit-grass hunt for mother *(Devotion T1)* · the black arm transforms *(Body Horror / Mystery T2)* · meets Maisie + Elowen, perfect sync *(Fated Bond T2)* · steals the manna from Thunderbolt Hall *(Heist T2)* · Felix evolves to 6-star *(Hidden Power T1)*. +- **Capital establish (Ch 37–55):** disowned mother begs old "friends," Flora's performed cruelty *(Class Humiliation T2)* · the black-robed patron knows the truth *(Vindication-Tease T1)* · Bloodflower Parlour assassin + Bloodhell poison on Freya *(Mortal Threat T1)* · six-star reveal at the exam, beats Leo Noble *(Public Reversal T1)*. +- **Reliquary / Ashdown (Ch 56–100):** ranking tests for the Cloister (the cure gate) *(Race Against Clock T1)* · grandfather Duncan Ashdown revealed, refuses Freya *(Family Cruelty Repeated T1)* · cousins Gemma/Rhys gatekeep *(Institutional Injustice T2)* · the Amberbourne Rock / "The Crag" grants Jasper a two-level jump *(Power Surge T2)*. + +--- + +## Flavor notes +- **The opening is a triple-betrayal engine** — romantic (Lydia), violent (Niall kills Midas), and parental-in-effect (the credit/future stolen, then his father disowns him). Every promo's empathy lives here. +- **Felix is asset and disguise at once** — a god-tier beast that reads as "a filthy little chicken." His banter is the show's comic release valve; never let it lead over the injustice. +- **The cure is the real prize behind the revenge** — Jasper's drive is split: punish Niall/Lydia AND reach the Reliquary in time to save his mother. The clock (lifesbane, ~6 months) is the urgency engine. +- **The grandfather mirrors the father** — both Duncan Ashdown and Archie Cooke abandon their own blood without flinching; the betrayal pattern repeats at a higher tier. +- **Two men loved Freya** — Harvey Blackwood and Colson Garside, both far stronger and "better looking than Archie Cooke." Quiet patronage flows to Jasper from this. +- **The black arm is the buried mystery** — tied to the shadow that "killed" Felix in a past life; it is the show's deepest unanswered question and must stay unanswered as a promo loop. +- **Money/stakes are explicit** — the Order of the Amber Flame, spirit-gem economies, the assassination bounty (1,000 yellow-patterned spirit gems), loans from Sage Blackwood — concrete, calculable pressure. + +--- + +## Relationship map (ch 100) +- **Jasper ↔ Felix:** brother-bond; Felix is family ("we're a team now"), comic foil, and secret god-tier weapon. +- **Jasper ↔ Freya:** the foundation; everything repays her sacrifice and races her clock. +- **Jasper ↔ Niall / Lydia:** unresolved revenge; they hold his stolen Soul, story, and reputation; Lydia escalates to a kill-bounty. +- **Jasper ↔ Archie / Duncan Ashdown:** father and grandfather, both of whom discard their own blood; the cure sits behind Duncan's shut door. +- **Jasper ↔ Maisie:** fated, inexplicable bond + perfect sync; she boosts him in battle and quietly raises his status; love interest. **Jasper ↔ Elowen:** prickly ally (the Sixth Princess) who warms to him. +- **Jasper ↔ Esme Penley / Harvey Blackwood / Colson Garside:** hidden patrons (the latter two once loved Freya). +- **Jasper ↔ Euan / Albie / Leo / Gemma & Rhys:** the ladder of rivals he climbs — Blazehollow nobodies up to Thunderbolt Hall and Ashdown Manor. +- **Felix ↔ the dark shadow:** the cosmic hunter that killed him in a past life — now mirrored in Jasper's black arm. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rothc.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rothc.md new file mode 100644 index 0000000..44b2999 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rothc.md @@ -0,0 +1,134 @@ +# RotHC — Reign of the Hidden Commander — Series Worlds Entry + +> **Opening anchor:** first 5 min (the spaceport goodbye → the death tunnel → "Young Lord Alain Valerius") / first 5 eps (born a girl, declared a son, results sealed) / first 8 eps (the inheritance wager against Soren) / first 20 eps (gene agent, Mindscape, the tempering bath). **Source verified through:** ep 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_rothc_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 from a close read of eps 1–20; Layer 2 + canon limits from a full read of eps 20–100. All engines UNTESTED (no promos shipped). + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) + canon gate (limits). Layer 3 is on demand. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **The Daughter Who Has to Be a Son** *(Thruline — secret identity + stolen inheritance)* +2. **A Militarized Star Commonwealth Where Rank Is Destiny** *(setting — Planet Dominion, the Central Scout Academy, mecha)* +3. **The Mindscape and Little Four** *(engine — the hidden training system nobody else knows exists)* + +## Protagonist — Alaina Valerius +**Identity.** In her first life she was a chronically ill woman on Valora who spent twenty-four years in a bed, in daily agony, watching her family nearly go bankrupt keeping her alive — and who watched her own brother quietly exhale with relief when she died. She wakes as a fetus in an interstellar Commonwealth ten thousand years later, the unborn child of Major General Caius Valerius, killed at the front two months after the wedding. Commonwealth law lets only male relatives inherit military honours, so her mother stands in front of the government, the military, and her husband's circling relatives and announces she is carrying Caius's **son**. Alaina is born a girl, named a young lord, and has never been allowed to be anything else since. The engine is the gap between what she is legally required to be and what she actually is — and the fact that the only person who could ever undo it is her own mother, who did it out of love. Secret Identity on Institutional Injustice. +**Combat.** Fights on precision, patience, and deception — never mass. She is a small child among children twice her weight; she wins by seeing the opening first, by ambush, by playing the harmless kid until the last instant. Every technique she owns is a killing technique learned in the Mindscape, which is exactly why she cannot use most of them in a sanctioned match without exposing herself. +**Power Source.** Two hidden systems, both invisible to this era's technology. (1) The **Aether channelling exercises** an old Valoran doctor taught her in her first life — useless for a decade, then live from the moment she reincarnates: they null pain, repair a day's training damage overnight at no cost, and multiply everything she absorbs. (2) The **Mindscape** — the learning space of a Mandora-system device that calls itself **Little Four**, staffed by numbered instructors, run on missions, deadlines, honour points, and punishments. Limits: her real psionic power is sealed by Little Four (tier four at birth, reported as tier two); she has never touched a mecha; she is six years old through almost the entire window. +**Voice.** Dry, wry, self-deprecating, allergic to attention. An adult's patience inside a child's mouth. She banters with Little Four, is helplessly soft with her mother, meets adults with a flat politeness that reads as unnerving poise, and states brutal things in a bored register. Not a hero — a woman who has already lost one life and intends to spend this one free. + +**Voice Samples (verbatim — never paraphrase):** +1. "It's flat." … "Thank God, I'm still a girl." (Ep 5) — relief, checking her own body minutes after her mother renames her +2. "Bring this Young Lord an extra large steak!" (Ep 18) — the wry adult voice inside the four-year-old +3. "I was experiencing death. In all kinds of ways. Wanna try?" (Ep 58) — asked what she did over the holiday +4. "I don't punish the innocent." (Ep 54) — to the traitor she has just cornered +5. "Saving you was my choice. Dying is yours." (Ep 93) — refusing to be anyone's master +6. "Freedom. A life without chains." (Ep 94) — naming what she actually wants + +**Drift tripwires.** Wins by raw power or scale | is publicly outed as a girl | pilots a mecha | claims first place and keeps it | reveals Little Four or the Mindscape to anyone | is played as a swaggering prodigy rather than a woman hiding in a child | learns her father was a god-class pilot | resolves the inheritance, the disguise, or Caius's murder. + +## Setting — Entry-Window World (the Valerius estate, Planet Dominion) +**Feel.** A capital planet you have to earn the right to live on. The Commonwealth preaches equality and runs a rigid class ladder in the shadows — which planet you may call home is decided by rank, and Dominion is the top rung, reserved for high officials, decorated commanders, and old families. Every child is enrolled at six and groomed for the military; mecha operators are the aristocracy of that world, and there are only twelve god-class ones alive. The Valerius estate is enormous, hushed, and under siege from the inside: a widow, an old chamberlain, a private hospital full of hand-picked loyalists, and a baby whose body is a state secret. Outside it: transparent landing pads hundreds of stories up, hover traffic stacked four deep, and relatives who would rather have the dead man's benefits than his child. + +**Sensory Samples (verbatim):** +1. "The entire landing pad was transparent. A sheer drop of hundreds of stories yawned beneath them." (Ep 14) +2. "A large, red bird with outstretched wings was emblazoned on its chest, looking like it was about to take flight, its body wreathed in flames that shone brilliantly in the morning sun." (Ep 57 — the Valerius phoenix) +3. "Assessment Data: Physical Fitness, S rank. Spiritual Power, Tier Two. Potential, S rank. Overall Assessment: Excellent. Recommended for focused cultivation." (Ep 3 — the newborn pod, seconds after it screamed an alarm) + +**Drift tripwires.** Dominion as a meritocracy | the estate as a safe haven rather than a fortress under siege | the disguise as a costume rather than a legal necessity | the military as a protector | mecha as common hardware. + +## Tone Constraint +Institutional-injustice underdog with a hidden-identity spine, not a flex. Alaina's edge is invisible and her constraint is total: the more brilliantly she performs, the more dangerous her life gets — perfect scores get buried, a record-breaking rank gets hacked down, a flawless bath result gets read as broken pain receptors and repaid with harsher training. If a beat lets her simply dominate, or skips the mother who did this to her out of love, empathy collapses and it reads as a power fantasy. Little Four's comedy is the release valve, never the lead. + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +A woman floats above her own body in a military hospital and watches her family cry — and catches her younger brother quietly exhale, as if a weight had lifted. She is twenty-four and has been a burden for all of them. A child's voice screams at her that she is about to dissolve, and yanks her backwards. Cut: Star Calendar 4731, a spaceport packed with soldiers boarding for the front. Seraphina puts her husband's hand on her stomach and tells him he's going to be a father; Caius names the baby Alaina, after her — "That way, a part of you will always be with them" — and boards the flagship. A month later the fleet enters a death tunnel and is consumed in a dead-star meteorite field. No survivors, no bodies. Before Seraphina can grieve, a distant Valerius relative arrives to claim the honours Caius died for — and offers to keep her, as a favour. She throws him out, and then, in front of a Commonwealth government representative, makes the choice the whole show is built on: she announces she is carrying Caius's **son**, because only a son may inherit. + +## First 5 episodes *(the first sitting)* +Alaina spends the pregnancy practising Aether exercises that never worked once in twenty-four years — and feels Aether for the first time. She is born in the family's private hospital, delivered by hand-picked loyalists. The newborn assessment pod screams an alarm and then reports **S / Tier Two / S** — better than her father's own birth results — and Seraphina immediately orders the results sealed, because a girl who tests that high gets taken. Quentin, the chamberlain, is quietly heartbroken that she is a girl: no woman has ever piloted an Imperator. Alaina meets the voice in her head — "mecha learning device number four-four-four-four-four-four-four-four-four, from the Mechanical Kingdom of the Mandora star system" — and learns it was the device's awakening that killed her in the first place. Then she hears her mother say the words: "From now on, you are the young lord of the Valerius family. You can only be the young lord of the Valerius family." She wriggles a hand down to check, and finds she is still a girl. + +## First 8 episodes *(the anchor band)* +At the handover of the inheritance documents, Soren Valerius — the branch family's grand elder — proposes that the "most outstanding" Valerius child receive Caius's benefits instead, and produces a one-year-old candidate. The government representative smiles and says nothing. The military representative says the military does not allow the child of a hero to be bullied, and means the opposite. Seraphina, ice-cold, wagers everything: whoever's child tests higher wins, and the loser leaves Dominion forever — and if Alaina loses, Alaina is barred from every military system in the Commonwealth for life. The branch child tests S / Tier One / A-Plus. Alaina tests S / Tier Two / S. The Valerius family is exiled from Dominion within the month, and Seraphina severs her daughter from the name entirely. + +## First 20 episodes *(texture band)* +The military begins delivering **premium-grade gene stimulating agent** — nearly ninety percent purity, worth more than cities, escorted by top mechas. The rarest SS-rank infants absorb seven vials; Alaina absorbs ten, and a general quietly classifies her file as an S-class secret to keep the military from taking her. The Mindscape opens: a circular hall of sealed doors, a pitch-black psychological-resilience test she passes at **Triple S**, and the numbered instructors — **Number One**, who tests without announcing it, and **Number Nine**, who demonstrates three times and never explains. Honour points, deadlines, punishments. At eighteen months the Valerius **tempering bath** — inky green, ninety-six percent plant, four percent snake, scorpion, centipede and spider venom — improves her metrics by 30–80% against her father's all-time record of 10–50%. She endures it in silence, so the household concludes she has faulty pain receptors and resolves to train her harder until she feels "real" pain. + +## HARD BLOCKS *(opening-binding)* +1. **Alaina is a girl living publicly as "Young Lord Alain Valerius."** Known only to Seraphina, Quentin, Elara, the family's hand-picked medical staff, and Little Four. **No one outside the household is ever shown discovering it, and the show never dramatises a reveal.** Her peers, teachers, rivals, and the enemy Empire all say "he." *Translation caveat: the source is inconsistent — the Superintendent's own file (ep 26) reads "the daughter of Major General Caius Valerius," and the Dean and Lt. Gen. Scott say "his daughter" / "the girl" (eps 85–86), with no in-story reaction from anyone. Treat as MTL pronoun drift, not canon. Never build a beat on either reading.* +2. **The disguise exists because Commonwealth law lets only male relatives inherit military honours and benefits.** It is legal and economic, never a whim. Load-bearing — it drives every constraint she lives under. +3. **Caius Valerius is DEAD** — his fleet was consumed in a death tunnel in a dead-star meteorite field before Alaina was born. No body. Never shown alive. *(Ep 55 foreshadows an impossible future choice between Caius and Alaina, and ep 100 raises the contradiction that legacies require Imperator class or higher — tease, never resolve.)* +4. **Little Four and the Mindscape are a total secret.** No character in the world knows either exists. Every intervention Little Four makes must be deniable — a "malfunctioning" hover car, a mecha that "froze." +5. **Alaina's real psionic power was tier four at birth**, sealed by Little Four to tier two; the data given to Seraphina, Quentin, and the military is **fabricated**. She is at the peak of tier four by six. Nobody knows, including her mother. +6. **Alaina has never piloted a mecha through ep 100.** Mecha appear as transport, as escort, as shop models. She rides in a cockpit once and blacks out from her fear of heights. +7. **She never keeps a public first place.** Second place gets hacked down to seventeenth; two later tournaments end at fourth by forfeit. Deliberate mediocrity is her survival strategy, and the show enforces it. +8. **She does not know her father was the youngest and fastest-rising god-class pilot in Commonwealth history.** She thinks he was an unremarkable major general. The Dean, a lieutenant general, and Little Four all know and none of them tell her. +9. **Her reincarnation is known to no one but Little Four.** +10. **The Aether exercises are from her first life, are undetectable by this era's technology, and are never explained in-world.** The household credits everything to Caius's genetics. +11. **The branch family lost the ep-8 wager and were exiled from Dominion.** The departure itself is never shown, only confirmed in passing at ep 14. Soren never reappears — the confrontation is spent; do not re-run it as a live threat. +12. **She is six years old for almost the entire window** (seven by ep 98). Do not age her up. + +## Entry map *(tease ok, anchor flags)* +- **The disguise + the inheritance wager** — eps 1–8. The opening **should** anchor here. +- **The Mindscape / Little Four** — from ep 11. Anchorable as her secret, never as visible power. +- **The gene agent and the ten vials** — ep 9–10. Strong opening texture. +- **The Central Scout Academy** — from ep 21. Opening may reach here; the intelligence-test rigging (ep 21) is the cleanest institutional-injustice beat in the show. +- **The assassination attempt / Florian's betrayal** — eps 43–60. Tease, don't anchor. +- **Caius's sealed legacy in the Nexus** — ~ep 86, tested ~ep 99–100. Tease only. +- **The Path of Dominance** — ~ep 94. Far too late to anchor. +- **"Belief"** — ep 100. The name of the place Seraphina always wanted to go; also her father's Imperator mecha (ep 26). Unexplained to Alaina. Pure loop material. + +## Engines the opening supports +1. **Secret Identity / Hidden Truth (UNTESTED, STRONGEST):** a girl legally required to be a boy, from the hour of her birth, with no route out and no end date. +2. **Institutional Injustice (UNTESTED):** an inheritance law that erases daughters; assessment scoring rigged by the great houses; a rank earned and secretly deleted; a hero's orphan used as bait. +3. **Bond / Family Loyalty (UNTESTED):** a widow who mutilates her daughter's life to protect what her husband died for, and apologises for it every day. +4. **Revenge / Justice Denied (UNTESTED):** Caius was killed by moles inside his own military's high command; the same people are still there and still hunting his child. +5. **Underdog Awakening (UNTESTED):** the smallest, skinniest kid in the room, ranked seventeenth on purpose. +6. **Hidden Power / System (UNTESTED):** the Mindscape, the honour points, the sealed tier-four power — all invisible, all deniable. + +## IM sources — opening window +- **She dies a burden and her brother exhales with relief** (Ep 1): *Family Abandonment, T1* +- **Caius names the baby after his wife, then boards; the fleet is consumed** (Ep 1): *Sacrificial Death, T1* +- **A relative arrives to claim the dead man's honours and offers to "take care of" his widow** (Ep 2): *Stolen Achievement, T1* +- **Seraphina declares her unborn daughter a son in front of a government representative** (Ep 2), **then apologises to the newborn for it** (Ep 5): *Identity Erasure, T1* +- **Soren offers to test a "better" Valerius child for Caius's legacy while the government and military watch in silence** (Ep 7–8): *Institutional Injustice, T1* +- **The wager's terms: if Alaina loses, she is barred from every Commonwealth military system for life** (Ep 8): *Impossible Stakes, T1* +- **She endures the venom bath silently and is judged to have faulty pain receptors — so they train her harder** (Ep 18): *Cruelty Misread as Kindness, T2* +- **She answers the intelligence exam calmly and honestly and is scored 80 for "lacking imagination," because the great houses will not admit a child they can't brainwash** (Ep 21): *Rigged System, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** a woman who spent one whole life as a burden is reborn and immediately has her identity taken — not by an enemy, but by a mother who loves her, because a law says daughters don't inherit. Her father is dead before she exists, and his own relatives arrive to strip his child in front of the government he died for. +- **T2 (supporting):** every excellence is punished. Perfect absorption gets her file buried. A record-breaking bath result gets her diagnosed as defective and trained harder. A rank earned honestly is hacked away. A smile that wins a stranger over earns her a warning to stop smiling. +- **T3 (deepening):** the system is rigged all the way down — intelligence scoring belongs to the great houses, class placement is bought, mecha are restricted, retainers' children are barred from academies, and a hero's orphan is worth more to the high command as bait than as a person. +- **Drift risk:** lead with the Mindscape / the cheat-code system and skip the disguise and the mother, and it reads as a system-flex power fantasy — the exact wrong show. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **The disguise with no exit** — Seraphina's plan is to raise a second girl as a loyal guard who will publicly "marry" Alaina at adulthood; by ep 72 the practical horizon is hormone blockers at puberty. Alaina's stated life goal (ep 73) is a child of her own, which the disguise makes structurally impossible. Sell the trap; never open the door. +2. **Who killed Caius** — moles buried in the Commonwealth's own high command, still unidentified through ep 100. The enemy Empire has a foothold inside the military; the pilots who attacked Alaina were active-duty Commonwealth soldiers. Sell the betrayal, never deliver the name. +3. **Caius's sealed legacy** — a relic withheld from his daughter for six years by a lieutenant general trying to decrypt it for the military, then hidden in the academy's Nexus as an open public challenge under permanent surveillance. Only his heir can open it. Initiate the reach; never deliver the inheritance. +4. **The father she doesn't know** — Alaina believes Caius was an unremarkable major general. He was the youngest god-class pilot in Commonwealth history, one of twelve alive, and everyone around her knows except her. Pure dramatic-irony fuel. +5. **"Belief"** — the name of Caius's Imperator mecha *and* the place Seraphina always said she wanted to go. Alaina answers it correctly at ep 100 without knowing what it is. Tease, never explain. + +## 2b · Canon Limits / Never-Happens +- **The show never lets her win by power.** The narration forecloses it explicitly (ep 50): she is not a destined hero who flexes and wipes out hordes, not a beloved main character, not a damsel waiting on a prince. Every win is precision, patience, deception, or delegation. +- **The show never outs her.** No rival, doctor, teacher, or enemy ever suspects, and no reveal is ever dramatised. The closest anyone comes is Julian in ep 74, speculating about where her strength comes from — "An elite family? Some secret, powerful organization? Or maybe." — and deliberately stopping. The source leaves what he almost thought open; **do not play it as a near-outing.** +- **The show never lets her take credit or a following.** She forfeits, she is hacked down the rankings, and when a village she has saved kneels to her she refuses them and is called heartless for it. +- **The show never puts her in a mecha.** Not through ep 100. +- **The show never resolves the inheritance law, the disguise, her father's murder, or her father's legacy** — all four stay open wounds. +- **The show never lets an adult explain the world to her.** Every major reveal — the bait plan, the protection detail, the relic, the surveillance order in her own name — happens in scenes she is not in. + +--- + +# LAYER 3 → companion: `world_rothc_deep.md` · *on demand only* + +**Cross-show contamination:** checked against `series_worlds.md`. RotHC shares a Secret Identity pillar with **MVS**, **PE**, **TSS**, **SW** and **TBB**, and an academy/class-ladder pillar with **WBT**, **FLBM** and **SW** — keep distinct. RotHC = **Alaina**, a reincarnated adult woman raised as a **male heir for legal inheritance reasons** in an **interstellar mecha Commonwealth**, with a Mandora **learning device (Little Four)** and a **Mindscape** of numbered instructors. PE = a princess in a patriarchal court. MVS = a vampire System. SW = an ordinary man posing as a dud. WBT/FLBM = beast/rank academies. Don't let Little Four bleed into MVS's System, and don't let RotHC's academy read as WBT's. RotHC's setting marker is **space and mecha**; its identity marker is **a disguise imposed by law at birth by a loving mother**, not a chosen alias. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rothc_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rothc_deep.md new file mode 100644 index 0000000..1088c9d --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_rothc_deep.md @@ -0,0 +1,196 @@ +# RotHC — Reign of the Hidden Commander — Layer 3 Deep Companion + +> On-demand Layer 3 only. Not in the default build path — pulled for canon questions, W2/W3 canon-break checks, or a W5 deep dive. All facts trace to the eps 1–100 source. Reference-formatted; scan, don't read. + +--- + +## Full Cast + +### Core +| Character | Role | Key detail (source) | +|---|---|---| +| **Alaina Valerius** (public: **"Young Lord Alain Valerius"**) | Protagonist | Born Star Calendar ~4731 on **Planet Dominion**; six years old for almost the whole window, seven by ep 98. Reincarnated: in her first life a chronically ill woman on **Valora**, dead at 24 after twenty-four years of daily agony. Birth assessment **Physical Fitness S / Spiritual Power Tier Two / Potential S** — better than her father's own. Real psionic power was **tier four at birth**, sealed by Little Four; at peak tier four by six. Absorbed **ten vials** of premium gene agent at six months (the SS-rank ceiling is seven). Mindscape psychological resilience **Triple S**. Skills: the Nine Foundational Stances (→ A-rank flexibility), **Rabbit's Spring** (10 honour points; 3×+ overall strength, measured at 5× leg strength at basic level), the Nine Stances of Bodily Tempering, **Tidal Force**, and a ~10-move arena repertoire reverse-engineered from opponents. Talent: **Profound Insight** — sees an opponent's weakest point the instant she sees the move clearly; "the perfect natural skill for a mecha pilot." Forged her own **Path of Dominance** (ep 94) — no child had ever broken a Path framework before. Crippling fear of heights, unresolved. Cannot inherit as a woman; cannot head her own family until sixteen. | +| **Little Four** | AI / contracted companion | **Mecha learning device number 444444444, Mechanical Kingdom of the Mandora star system.** Reassembled her scattering spirit at death and carried it through a wormhole ten thousand years forward — and caused that death, since his awakening pushed her power past what her old body could hold. Appears as a naked toddler; mental age ~5–6. Effectively a god in the virtual world: splits into countless avatars, hacks hover cars and standard mecha AIs, forged a **triple-S Commonwealth Banking Alliance account**, funds gene agents by selling ten-thousand-year-dead Earth books online. Scrubs the impurities from her gene agent with a line of code — which is why she never bulks up. Sealed her psionic power and **fabricated every reading her mother, Quentin, and the military have ever seen.** Has recorded every moment of her life since birth. Secretly maxed out the time limit on the wilderness-survival illusion (eps 39–42), which is why her ordeal ran so long — he intends to take it to his grave. Only hard limit shown: he cannot penetrate the psionic crystal of the legacy mission, and he cannot act on people ("People aren't computers I can just hack"). | +| **Seraphina Laine** | Mother / emotional anchor | Widowed two months after the wedding. In front of a Commonwealth government representative she declared her unborn daughter a **son**, because only male relatives may inherit military honours — and has enforced it every day since. Sealed the newborn assessment so the military couldn't take her. Won the ep 7–8 wager that exiled the entire Valerius branch family from Dominion, and severed herself and Alaina from the name in the same breath. Theatrical, romantic, weaponised tears, "all bark and no bite"; a master manipulator in her daughter's own assessment. Confesses her failures to a photo of Caius. Would happily have let Alaina grow up a useless rich brat rather than a soldier. Refuses to accept Caius is dead, and speaks of him as if he's on a long trip. Grinds her teeth in her sleep. Takes a teaching-assistant post at the academy purely so Alaina can live at home and keep the secret. | +| **Caius Valerius** | Dead father | **The youngest and fastest-rising god-class pilot in Commonwealth history** — one of only twelve god-class Imperator operators alive; vice commander of the Seventh Division, Commonwealth Expeditionary Forces; operator of the Imperator mecha ***Belief***. Born **SS-rank** fitness, **tier one** spiritual power. Named the baby "Alaina" after Seraphina ("Laine") so a part of her would always be with the child. Called to the front two months after the wedding; his fleet entered a death tunnel and was consumed by an energy disturbance in a dead-star meteorite field. No survivors, no bodies. His death is attributed to **moles buried in the Commonwealth's own high command**, and it started the current war of annihilation. Never appears alive on-page. **Alaina does not know any of this.** | +| **Quentin Valerius** | Chamberlain / grandfather figure | Served the house three generations; practically raised Caius. Publicly a mild, fussy old retainer; actually a master of **Flickerstep** who kills with a dagger and a garrote cord that unravels into hair-thin strands — and enjoys it. Kills six of eight professional assassins alone across eps 46–48; the last two, including the team leader, are shot by Squad 413's mecha in ep 51. Disabled a grown woman with one flicked finger (ep 14). Was quietly disappointed Alaina was born a girl, because no woman has ever piloted an Imperator. Raised Florian as his own successor and has to stand over his body. Wants to live to see Alaina's children. | +| **Elara Valerius** | Senior retainer, Quentin's wife | Runs the tempering baths. Concluded from Alaina's silence that the child has **faulty pain receptors** — the misreading the narration flags as the seed of escalating future torment. "This is a world where only the strong survive. Without real power, we can't protect what the Master left behind." | + +### The Mindscape +| Character | Notes | +|---|---| +| **Instructor Number One** | Chief instructor; from an "advanced society" / the **Mandora star system**. Radiates the pressure of a drawn sword. Tests without announcing it ("tests could be anywhere"). Identified Alaina's **Profound Insight** and brought in Number Five specifically to forge it. Intended her for the Sovereign or Sage Path in four years; groomed her as his own successor. Beats Number Five into the ground when he oversteps. | +| **Instructor Number Nine** | Female; delicate features, military uniform, cold by nature but genuinely fond of Alaina. Taught the Nine Stances, killing-intent suppression, and the doctrine "There is no 'almost' in training… You either know something completely, or you don't know it at all." Broke a core Mindscape rule to cross boundaries and check on her host, "at a heavy price" — never collected on-page. | +| **Instructor Number Five** | Handsome, lazy grin, sadistic. **Sealed inside the Mindscape** for breaking hundreds of prodigies; unsealed specifically for Alaina. Used the forbidden **Extreme Hell Training Method** on her against Number One's orders; she is the only person ever to pass it with her sanity intact. Wanted her on the Heartless Path or the Path of Slaughter. Treats her as an experiment: "Alaina really can influence intelligent bio-entities." | + +### Her circle (Group 072 / Special Class A) +| Character | Notes | +|---|---| +| **Ronan Kael** | Son of Colonel Roric Kael, ace pilot of the Vanguard mecha *Optimus*. Sturdy, feral, zero shyness; the first to call her **"Boss."** Fights on pure instinct — later revealed as an innate **sixth sense** (Perception / Animal Instinct), a talent the Commonwealth calls "a gift from the gods" and Mandora rates as lower-tier. Beats Ivor Rhys; takes the class #1 title when Alaina forfeits. Taken as initiate disciple by "Coffin-face." | +| **Julian Harkin** | Son of Colonel Marcus Harkin, deputy director (later Director) of the **Commonwealth Central Military Intelligence Agency**. ~260 IQ, the group's strategist, physically the weakest of the four; wins by outlasting. Highest Spiritual Power in the original exam group (**Tier Three**). The only one who gets close to the truth about Alaina — and deliberately stops himself. | +| **Lars Rogan** | Son of Colonel Fenton Rogan, commander of the Third Fleet, Ninth Division. Pretty-boy, hot-tempered, notoriously bad luck in draws. Attaches a condition to his loyalty: protect him **and his sister**. Taken as initiate disciple by "Smiley-face." | +| **Lara Rogan** | Lars's shy twin, Special Class B. Wins by trading a hit and shattering an arm with the Rogan family **one-inch punch**. Carries an unacknowledged crush on "Alain" — the disguise's quietest landmine. | +| **Anya Harkin** | Julian's cousin, Special Class B. Abrasive, territorial about Ronan, charges like a torpedo. | +| **Caleb Flynn** | Class A's dead-last student. Commoner; S-rank body and tier-one psionic power from a random mutation. His parents **sold him to the military as a research subject**; after six years he was declared a valueless fluke and discarded. Threw a seat challenge to Alaina on purpose to buy a month of her protection from Ivor — then regretted using her, and would rather have followed her honestly. Climbs from 50th to 28th. | +| **Shaun Rogan · Owen Vance · Gareth Rhys · Cole Heston** | The rest of exam Room 72's ten. Shaun and Cole are commoners riding inherited premium military benefits; Gareth is a House Rhys branch member who plans to become a career soldier to escape the family. | + +### Antagonists & the world above her +| Character | Notes | +|---|---| +| **Soren Valerius** | Grand elder of the Valerius branch family, ~70. Tried to have Caius's benefits reassigned to a "more outstanding" Valerius child, arguing "The Valerius family made Caius. We can certainly make another." Demanded terms that would have barred Alaina from every Commonwealth military system for life. Lost; the entire branch family was exiled from Dominion within the month. | +| **Florian Valerius** | Captain of the Valerius house guard, ~34, raised by Quentin as his designated successor. **The traitor** — sold Alaina's route to assassins for six vials of gene stimulating agent a year and a future for his son. Killed by Alaina and Little Four in ep 54; his parting move is a poison dart aimed at her loyalists' trust. | +| **Leo Valerius** | Florian's five-year-old son. Birth assessment "only slightly weaker" than Alaina's — and barred from every scout academy because retainers' children may not enrol. That law is what manufactured his father's treason. Alaina tells him a strategic lie about who killed his father, frees him in name, keeps him in the house, and calls him "an excellent chess piece." | +| **Ivor Rhys** | Third grandson of the head of **House Rhys**; first-ranked in first-grade Special Class A **by interview, not combat**. Building a faction; targets the family-less and moneyless first. Carries a thousand-year-old hereditary killing art. Loses to Ronan and concludes House Rhys's secrets have been leaked. | +| **Adrian Cross** | Homeroom teacher, first-grade Special Class A. Clawed his way up from a normal family; despises "spoiled rich kids," assumes Alaina bought her place, and reopens the seat challenge on her alone — then books it as an **Open Arena** broadcast to maximise the humiliation. Reverses after she wins in one punch, and praises the loser more warmly than her. | +| **"Four One Three" (413)** | Commonwealth Special Mecha Forces, **Bladed Special Ops Team**. Ran Alaina's exam Room 72, then commanded her covert protection detail. Flies **Freeform Evasion**, the military's most advanced manoeuvre; disables six enemy mecha while sparing every cockpit. Ordered the score-hack that hid her. | +| **The Commander / "the Superintendent"** | Commander of the Mecha Special Forces; real rank a military secret; posed as the academy's Superintendent. Ordered her rank hacked from 2nd to 17th — "the nail that sticks out gets hammered down" — then defied a stand-down order to protect her, and later paid an old friend a fortune to buy her academy protection. | +| **The General** (unnamed) | High command. Buried Alaina's ten-vial absorption file as an S-class secret as a favour to a dead friend. Also the architect of the plan that uses her as **bait** to draw out the moles who killed her father — and will not promise she'll be safe. | +| **Dean Evan Yates** | Dean of the Central Scout Academy; Caius's friend and the executor of his message. Personally cancelled Alaina's day-student status and installed her family on campus. Fought Lt. Gen. Scott for six years over her inheritance. | +| **Lt. Gen. Theodore Scott** | Held the relic Caius left with him for six years, trying to decrypt it for the military and failing. Raised Alaina's security clearance and placed her at the academy to protect her. The compromise: the relic goes into the Nexus as a public challenge under permanent military surveillance. | +| **The masked Empire handler** | Enemy spymaster, disguised voice, black screen. Called off Alaina's assassination on the reasoning that a god-class pilot's bloodline is genetically spent and the Commonwealth was using her as bait anyway. "Caius Valerius's line is washed up." | +| **Uriah Valerius** | Young house guard; his mecha scored by beam fire near the cockpit is the evidence that clears him. Pledges his life to Alaina personally. Foreshadowed (ep 55) to one day face an impossible choice between Caius and Alaina. | +| **"Coffin-face" (Tai) & "Smiley-face" (Yves)** | Front-line pilot instructors on a year-long academy rotation, scouting for the secret **Initiate Program**. Take Ronan (silver dollar, pine) and Julian + Lars (copper plates, orchid). | + +--- + +## World Mechanics + +### Polity and society +- The state is **the Commonwealth** (the text occasionally renders it "the Federation" or "the Dominion" — treat as one polity). At war with **the Empire** / the **Ferrand Empire**; a war of annihilation triggered by Caius Valerius's assassination. +- **Rigid class ladder decides which planet you may live on.** **Planet Dominion** is the capital and the top rung — high officials, decorated commanders, and old families only. Others named: **Bastion** (logistics base), **Argent**, **Cyan** (a third-rate backwater; House Rhys's seat), **Arcion** (the spaceport in ep 1). +- Society sorts into **common families, military families, and elite families**. The **great houses** hold enough power to take first dibs on academy class placements and to run intelligence scoring. +- **Every child must enrol in a scout academy at six and complete ten years of mandatory schooling.** Scout academies are "nurseries for future soldiers"; they are **independent of the government and the military** and are protected by god-class pilots. +- **Inheritance law: only male relatives may inherit military honours and benefits.** Justified publicly on the grounds that no woman has ever piloted an Imperator — the recoil requires a physique the politicians declared women can't build — so investing in a daughter "wastes taxpayer money." +- Ten thousand years have passed since Alaina's Valora. Cosmetic correctives by injection mean there are essentially no unattractive people. + +### Assessment and ranks +- **Newborn assessment pods** report **Physical Fitness** (S / A+ / A / B…), **Spiritual Power** (Tier One / Two / Three / Four), and **Potential** (S / A+ / A / B+ / B). Public devices only handle up to **tier three**; a tier-four newborn would normally die in the womb. +- **Public assessment centres** rank newborns F–S. F gets nothing. D gets two bottles of grade-four gene agent a year; C, grade three; B, grade two. **A** gets a choice: two bottles of grade one a year and independence, or unlimited supply and **lifetime military service**. **S** gets taken by the military, no questions. +- **Psionic power cannot be formally tested until age ten**, when it matures and branches into types. + +### Gene stimulating agents +- Four market grades by purity: **grade four = 30%, three = 45%, two = 60%, one = 75%.** Higher purity means less bodily damage and more absorption. An average person might afford one bottle of the lowest grade in a lifetime; each grade up is **ten times** the price. +- **Premium grade** — reserved for the central military, ~**90%** purity, the research ceiling. Ten tubes are worth more than cities and travel under top-mecha escort. Delivered every six months to the heir of a fallen officer. +- The rarest SS-rank infants absorb about **seven** vials. **Alaina absorbed ten.** +- Impurities accumulate as **bulk** — a tougher body at the cost of flexibility and resilience. Little Four scrubs hers with code, so she stays lean. + +### The Mindscape (Little Four's learning space) +- A circular hall ringed by sealed doors; only **Physical skills** has ever opened. Entry is gated by a pitch-black **psychological resilience** test — panic means ejection; Alaina scored **Triple S**. +- Three foundational series: **Offensive, Balanced, Defensive** — pick exactly one; practising more than one causes serious bodily damage. Defensive splits into **Endurance** and **Flexible**; the system assigned Alaina Flexible *because she is a girl* — the one entity besides her household that knows. +- Flexibility ladder: newborns are B; untrained adults decay to D–F; Offensive drops below D; Balanced/Endurance top out at C (rarely B); **Flexible reaches A and beyond.** +- **Missions carry deadlines, rewards, and punishments.** Reward formula seen (the only award announced on-page): 1 honour point per day remaining + 100 for a perfect assessment. Punishment menu: **200 honour points deducted**, **200 jolts of electric shock**, or **10 points = 30 days' extension** with the penalty doubled on failure. +- **Honour points** buy skills (Iron Skin at 1 pt; Eagle Claw / Iron Head / Golden Finger / Crippling Legs / Long Ape Arms / **Rabbit's Spring** at 10; a 50-pt tier gated behind stat minimums), courses, and games (50 → 10,000). Unspent points carry over — a fact the system never states and Number One refuses to confirm. +- **Time dilation:** instructors can stretch the training clock. One night has run as long as two subjective months; Alaina once took "three years of bitter suffering" in the days before a tournament. +- **Death inside is real-feeling and non-permanent** — except on an **Exclusive Mission**, where dying fails it forever. +- Prolonged brutality leaves a physical **malevolent aura** / leaking killing intent that will eventually damage her body and stunt her growth. Suppression is not a cure; mastery is. + +### The Paths +- Named: **Path of Slaughter, Demonic Path, Ghoul Dao, Heartless Path, Sovereign Path, Sage Path, Path of Fellowship, Path of Benevolence, Heart's / Literary / Martial Dao.** "There are thousands of Paths." +- Grasping one makes all future learning explosively faster — ten years' work in two or three. **Every established Path demands you give up part of yourself**; even Fellowship walkers lose their families. +- Stalling at "the gates of the Path" without a purpose causes loss of control — bloodthirsty rage, a desire to destroy everything. The cure is a purpose, not a technique. +- Alaina refused all of them, forced the "mysterious voice" to admit it was the Mindscape system, answered "What is the Path?" with **"A person's true self,"** and named her own the **Path of Dominance** — free, not bound to any one way, holding the potential for every Path. The system shut down its legacy shortcut and stripped the Path insights back out of her head. **No child had ever done this.** She carries only "a trace of its essence": enough that a hint of it would leave a tenth-grader unable to fight at full strength. + +### Talents +- **Profound Insight** (Alaina) — instantly spots an opponent's weakest point once she sees the move clearly. Number One calls it the most valuable combat talent there is and "the perfect natural skill for a mecha pilot"; even in Mandora's advanced society such children are "practically one of a kind." **She does not know it has a name.** +- **Perception / Animal Instinct** (Ronan) — what the Commonwealth calls the **sixth sense**. Forged deliberately by brutal training with an abysmal success rate; a "gift from the gods" here, a lower-tier talent by Mandora's scale. +- **"The Zone"** — a slow-motion perceptual state Number Five names and immediately refuses to believe in a six-year-old. She cannot summon it at will. + +### Aether channelling exercises +- Taught by an old Valoran doctor in her first life; practised for over a decade with no result, then live from the moment of reincarnation — she felt Aether for the first time as a fetus. +- Effects: nulls pain in a meditative trance; **replenishes energy as fast as it is spent** and repairs minor damage (so she cannot be exhausted by any opponent weaker than her); **fully repairs a day's training damage overnight at no cost** to life force or cellular energy, which this era's medicine cannot do; massively boosts absorption of the tempering bath; flooding her limbs instantly doubles their strength. +- **Undetectable by this era's technology.** Only Little Four can see it, and only through the host bond. The household credits everything to Caius's genetics. + +### The Valerius tempering bath (family secret) +- A hidden room, a waist-high wooden tub, inky green liquid: **96% plant matter, 4% snake, scorpion, centipede and spider venom.** You must stay conscious throughout; the middle thirty minutes are the worst, and most children pass out there. Caius went conscious-but-comatose for half a day. +- Improvement records: **Caius 10–50% across the board (the all-time family record). Alaina's first bath: 30–80%.** + +### Mecha +- **Restricted goods**, banned from public sale. Families licensed to keep a private force may own only basic standard models, painted **dark gray**; **Commonwealth White** is standard issue; **blue and white** marks captain-class; ace pilots may paint theirs any colour. +- Pilot ladder: **high-level pilot → ace pilot → Imperator class → god class.** **Only twelve god-class Imperator operators exist in the entire Commonwealth**, each a national treasure and a deterrent. +- Startup times: standard activation 1–3 minutes with full diagnostics; emergency activation 12–15 seconds for standard issue, 10–12 for captain class, ~2–3 seconds faster per class above; **Imperator class starts in true zero seconds.** +- Built of **super-titanium alloys**; height is never stated in-source (the largest Nexus display models run to three metres). Beam sabers, particle beam guns, lightspeed guns, sniper rifles, beam shields, detonation cables, plasma cannons (huge splash, pitiful range, kept because they're cheap), and **Super Homing Projectiles — "the Newbie Killer."** Inertial dampeners deliberately do not fully cancel G-forces, so the pilot can feel the machine — which is why peak physical fitness is required. +- Evasion techniques, ranked: **Freeform Evasion** (the military's most advanced) > **Flickerstep** (a certified master's move) > **Irregular Flash Evasion**. +- **AIs are self-contained; any hacking attempt triggers an automatic shutdown to manual.** Controlling one is considered impossible — which is why Little Four's feat gets laundered as "a House Valerius secret weapon." + +### The Central Scout Academy of Planet Dominion +- Nearly **ten thousand students enrol each year**; ten grades, ten years. Enrolment exams: **intelligence, strength, stamina, speed** — no score can be challenged until all four are done, and **any complaint voids your results for the entire year**. +- Strength test: **550 pounds = a perfect 100.** Alaina's was the first perfect score in three years. Intelligence: a three-to-five-minute chat; most six-year-olds score in the nineties; Alaina scored **80**, filed as "Calm and collected, no sign of creative thinking, lacking imagination." +- Speed/stamina: run inside a virtual-reality complex disguised as a parade ground — AOE illusion tech, real rain from ceiling sprinklers, a single ~165-foot-wide closed loop with no real finish line. Groups of **ten** by registration number, because ten is a squad; the hidden objective is squad cohesion. It normally runs three to four hours. Alaina's group finished in **under two — an academy first.** +- **Only the top 100 make the special classes**; top 50 → **Special Class A**, 51–100 → **Special Class B**, then Merit Classes (2,000 students), then regular. Uniform colours: **Special A scarlet red with gold, Special B white, Merit blue, regular green**; lower colours step aside for red. **Everyone is re-ranked every six months**, no exemptions. +- **Special-class students (the top 100 — both A and B)** choose their own courses and may live at home; Class A boarders get a free villa with VR pods. Day-studenting is considered "the most useless and pretentious perk imaginable." +- **Seat challenges:** anyone may challenge a seat's occupant. Win and you swap; lose and you're the winner's gofer for a month; refuse and you forfeit your place in the class. Arena formats: Closed, Private, Small, Semi Open, **Open Arena** (broadcast academy-wide, normally reserved for tournaments). +- **Military force is forbidden on academy grounds.** No student has ever been harmed on campus. Academy footage cannot leave the grounds — it wipes itself off any communicator the moment you step off campus. +- The secret **Initiate Program**: one-on-one mentorship, recruits identified at the first ranking tournament. Tiers — **initiate disciple** (all benefits, no responsibilities) < official disciple < **true disciple** (bound for life, "almost like father and son"). + +### The Commonwealth Nexus (the virtual world) +- "Humanity's second world," federally regulated with an iron fist after incidents where Nexus anarchy spilled into reality. **Login key is a person's unique, unchangeable brainwaves — one person, one ID, one avatar, no alts.** Only people whose minds have mutated a specific way can mask an identity; **Virtual Spectres** can damage brainwaves — murder inside the Nexus. Time runs 1:1. +- Under-sixteens get restricted access; children not yet in a scout academy cannot enter at all. Academy students are confined to the academy's sealed virtual campus — **a city about a hundred times the size of the real one**. Nexus purchases ship the real item; all sales final. The academy blocks credit conversion and gives students nothing, forcing them onto missions. +- **Mecha Street** sells functioning models built from the same alloy types as real mecha; a three-metre one costs a self-funded student seven or eight years of savings. +- **Legacy missions** can only be created by an **Imperator-class pilot or higher**, to choose a successor — which is the contradiction ep 100 leaves hanging about Caius. + +--- + +## Honour points, ranks, and hard numbers (tracker) +| Item | Value | Source | +|---|---|---| +| Birth assessment | Fitness S · Spiritual Power Tier Two · Potential S | Ep 3 | +| Real psionic power at birth | **Tier four**, sealed to tier two | Ep 50 | +| Psionic power at six | Peak of tier four, verging on five | Ep 50 | +| Gene agent absorbed, first session | **10 vials** premium grade (~90% purity) | Ep 9–10 | +| Tempering bath, first result | **+30–80%** (Caius's record: +10–50%) | Ep 18 | +| Psychological resilience | **Triple S** | Ep 11 | +| First honour-point award | 149 (49 days early + 100 perfect) | Ep 16 | +| Rabbit's Spring | 10 points; card promises 3×+ overall strength (B flexibility min, A recommended); measured at 5× leg strength **at basic level**, no stated ceiling | Ep 16, 63 | +| Enrolment strength test | 550 lb = perfect 100; first perfect in 3 years | Ep 21 | +| Enrolment intelligence test | **80** | Ep 21 | +| True enrolment rank | **2nd** — hacked to **17th** | Ep 36–37 | +| Mid-year tournament | Finals reached, **forfeited**; 2nd overall | Ep 85–86, 95 | +| Next two tournaments | **4th**, both by forfeit | Ep 96 | + +--- + +## IM sources by arc (type · tier) +- **The first death (Ep 1):** twenty-four years a burden, her brother's quiet exhale of relief *(Family Abandonment T1)* · the spaceport goodbye and the naming of the baby *(Doomed Devotion T1)* · the fleet consumed in the death tunnel, no bodies *(Sacrificial Death T1)*. +- **The declaration (Eps 2–5):** a relative arrives to claim the dead man's honours and offers to keep his widow *(Stolen Achievement T1)* · Seraphina declares her daughter a son in front of the government *(Identity Erasure T1)* · the assessment pod screams and the results are sealed *(Hidden Power T1)* · "Thank God, I'm still a girl" *(Relief-as-Grief T2)*. +- **The wager (Eps 6–8):** Soren proposes a "better" Valerius child while the government and military watch in silence *(Institutional Injustice T1)* · terms that would bar her from every military system for life *(Impossible Stakes T1)* · she out-tests them and the whole branch family is exiled *(Underdog Win T1)*. +- **The buried excellence (Eps 9–20):** ten vials absorbed, file classified S-class, nearly seized as a weapon *(Excellence Punished T1)* · the venom bath endured in silence, read as faulty pain receptors, repaid with harder training *(Cruelty Misread as Kindness T2)* · the Mindscape's deadlines, electric shocks, and cold disappointment *(Relentless Clock T2)*. +- **The academy gate (Eps 21–40):** honest calm scored as "lacking imagination" by houses that won't admit a child they can't brainwash *(Rigged System T1)* · warned to stop smiling *(Beauty as Liability T2)* · 2nd place hacked to 17th, "the nail that sticks out gets hammered down" *(Stolen Rank T1)* · a six-year-old made bait for the moles who killed her father, with no safety guaranteed *(Betrayal by the State T1)*. +- **The ambush and the traitor (Eps 43–60):** military-grade ordnance turned on a child on her first day of school *(Mortal Threat T1)* · Quentin fighting eight assassins alone *(Devotion T1)* · Florian, raised by Quentin as a son, selling her out for his own son's barred future *(Betrayal-Born-of-Injustice T1)* · Leo, orphaned, told a lie and made a chess piece *(Cold Necessity T2)*. +- **The Mindscape trials (Eps 61–94):** six years of training without a single complaint answered by unsealing the instructor who breaks prodigies *(No Reward for Endurance T1)* · a village saved and its survivors' fealty refused, so she is called heartless in the rain *(Punished for Mercy T1)* · every established Path demanding she give up part of herself *(Impossible Bargain T1)*. +- **The legacy (Eps 86–100):** her father's bequest withheld from her for six years by a lieutenant general trying to crack it for the military *(Stolen Inheritance T1)* · standing military orders to surveil her by name *(Watched T2)* · her father's true status known to everyone but her *(Dramatic Irony T1)*. + +--- + +## Flavor notes +- **The disguise is the wound, and the mother is the one who made it.** There is no villain to punish for it. Seraphina apologises to her daughter at birth and enforces it anyway, because the alternative is letting the men who circled Caius's corpse take everything. Every promo's empathy lives in that impossible position. +- **Excellence is the danger, not the reward.** Ten vials gets her file buried. A record bath result gets her diagnosed as defective. Second place gets deleted. A smile gets her warned. She learns before she can walk that the nail that sticks out gets hammered down — and the show never lets her forget it. +- **She is not building an empire; she is buying a private life.** Her stated goal, arrived at in ep 73 and named in ep 94, is freedom, no chains, and a child she can raise openly. Everything she does is instrumental to that. She refuses followers, forfeits titles, and turns down a village on its knees. +- **The comedy is Little Four and it must never lead.** A naked toddler AI who tried to make her call him "Master Four" because "Master" was popular in Earth media (ep 6), then read *Le Morte d'Arthur* and started calling her "Lord" (ep 16), throws jealous tantrums with a kitchen knife, and routes a baby's toxins into her bladder at the worst possible moment. Release valve, not engine. +- **The world is stratified all the way down.** Which planet you live on, which colour you wear, whether your father was a retainer — every layer has a door someone else holds shut. Florian's treason is manufactured by one of those doors, not by malice. +- **Money and stakes are concrete.** Vials worth more than cities, ten-times-per-grade agent pricing, 550 pounds for a perfect score, 240 credits for six meal sets, 500 virtual dollars for a broken window, six vials a year as the price of a man's loyalty. +- **Two men run the machinery above her head and she never meets either.** A general who buried her file for a dead friend, and a lieutenant general who sat on her inheritance for six years. Both think they are protecting her. Neither asks. + +--- + +## Source ambiguities & translation flags +*(The source is a machine-assisted translation with real internal drift. These are unresolved in-source — do not settle them in a build.)* + +- **The pronoun drift.** Most of the script says "he" for Alaina. But the Superintendent's file (ep 26) reads "the daughter of Major General Caius Valerius," and the Dean and Lt. Gen. Scott say "his daughter" and "the girl" repeatedly (eps 85–86) — with no in-story reaction from anyone. Ep 64's Empire handler goes the other way ("the boy… his son"). Treat as translation drift, never as an in-world reveal. +- **The mother's name.** **Seraphina Laine** throughout (19 occurrences), corroborated by ep 1's etymology — "'Alaina', it's close to your name, 'Laine.'" But ep 100's legacy form has Alaina write "Seraphina Alaina." Use **Laine**. +- **Her first-life age.** Ep 1 is explicit: "for twenty-four long years, she'd been a burden." Ep 21 says "her mature mind, honed over thirty years of life," and ep 68 has her tallying two lifetimes as "an old lady of over thirty." Use **24 at death**; the thirties references are two-lifetime totals. +- **Her first world.** Ep 1 names it **Valora**; eps 6 and 15 call it **Earth**. Same place. +- **Does the Dean know she's a girl?** Ep 86: "Caius left me a message. That item is for his daughter." Caius deployed before the birth and could not have known the sex. The source never explains it. **Do not resolve this in either direction.** +- **Aether vs Qi; honour points vs battle points.** The text uses "Aether" (eps 62–63) and "Qi" (ep 66) for the same internal energy, and "honour points" (Mindscape) alongside "battle points" (academy/Nexus). Pick one of each per build; the source does not distinguish them consistently. +- **Commonwealth / Federation / Dominion.** Three surface names for one polity. Use **the Commonwealth**. +- **Ep 35 and 36 are truncated in the export** — Ep 35 runs ~8 lines and ends mid-scene; Ep 36 opens mid-dialogue. Lars's condition and its fallout are partially missing. + +--- + +## Relationship map (ep 100) +- **Alaina ↔ Seraphina:** the foundation and the wound. Her mother took her identity to save her future and has apologised for it every day since. +- **Alaina ↔ Little Four:** partners, not host and device — she offered him brother-and-sister over a contract and it overloaded his loyalty programming. He also killed her once, seals her power, fabricates her records, and keeps at least two secrets from her. +- **Alaina ↔ Caius:** a father she never met, whose legacy she is legally required to be a boy to hold, whose true status she doesn't know, and whose murderers are still inside the government she lives under. +- **Alaina ↔ Quentin & Elara:** the grandparents who raised her, who would die for her, and whose devotion expresses itself as escalating pain. +- **Alaina ↔ Ronan / Julian / Lars:** followers she never asked for, who call her Boss and would follow her anywhere, and to whom she can never tell the truth. Lara's crush sits on the same fault line. +- **Alaina ↔ Number One / Five / Nine:** instructors from another star system who are grooming her for something they haven't named, and who have interests of their own. +- **Alaina ↔ the Commonwealth high command:** they buried her file, hacked her rank, bought her protection, withheld her inheritance, and used her as bait — all without telling her, and all while the men who killed her father are still among them. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_soaw.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_soaw.md new file mode 100644 index 0000000..866aa41 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_soaw.md @@ -0,0 +1,121 @@ +# SOAW — Soul of a Warrior — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_soaw_deep.md`. +> Status: DRAFT (source-built, NEW show — no prior world doc) · Confidence: Med — built from close read of eps 1–20 plus sampling through ep 100; later geography/faction lore lightly sampled. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and at the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion and loads on demand only. Build top-down; keep the top fast. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +> Matches the canonical **SoW** row in `three_pillars.md` (Soul of a Warrior). Used verbatim. + +1. **Reborn Warrior / Hidden Power** *(Thruline)* +2. **Family under siege (broke, honorable, in danger)** +3. **Noble Society / Academy** + +## Protagonist — Nathan Hayfield +**Identity.** A nameless, memory-less warrior soul wakes inside the corpse of Nathan Hayfield — a scrawny twelve-year-old beaten to death in a school duel — resurrecting him as he dies. He keeps the dead boy's face, name, and family and vows to fight for them; nobody knows the original Nathan is gone. An ancient master's instinct in a child's broken body, carrying a borrowed life he's terrified of "stealing." Fits **Hidden Identity / Reborn-Underdog** engines. +**Combat.** Wins by technique, deception, and reading opponents — never brute size. His soul knows every sword form; his child's body can barely execute them. Weakness: the body breaks before the soul does, and his strength must stay hidden. +**Power Source.** The **Power of Asura** — rare spiritual magic channeled by speaking the god's name; named techniques (Asura Fist, Asura Eye for lies/intent, Razor Finger, Speed Slice, Weakening Aura), plus **alchemy** (Dexterity Elixir, healing potions). Limits: power runs on a fixed ladder (Beginner→Apprentice→Master); leveling slows hard at Master; early spells are too weak to harm and need meditation + practice to land. +**Voice.** Archaic and theatrical ("thee/thou," "I cry your mercy") in public; dry, modern, sardonic in private thought. Tender and guilt-ridden toward the family he deceives; cold toward cruelty. A weary veteran narrating his own strategy through a boy's grin — never a swaggering chosen-one. + +**Voice Samples (verbatim — never paraphrase):** +1. "Nathan Hayfield, wherever you are – I dedicate my life to thee." (Ep 2) — vow / solemn +2. "If you are a puppet of some greater force, you relinquish your own will. If ever I relinquish my will to a greater force, I would rather someone killed me." (Ep 9) — creed / defiant +3. "Overconfidence has slain more warriors than battle, famine, and illness all put together." (Ep 5) — veteran tactician +4. "I see no real men here. Unless you refer to the ambulatory chamberpots standing in front of me." (Ep 5) — sardonic taunt +5. "I'm a stranger here. I stole this from him. And brought his family further into conflict." (Ep 8) — private guilt + +**Drift tripwires.** Becomes a swaggering chosen-one | wins by raw size/strength | reveals the soul-swap to family | loses the guilt over the borrowed life | maxes power instantly with no ladder cost. + +## Setting — Entry-Window World +**Feel.** A medieval feudal kingdom (Calandria) of honor-bound nobility and class corruption. House Hayfield is a fallen noble line — a holed thatch roof under a proud banner. Powerful houses (Raven, Clay) covet their land and want them stricken from nobility. Strength = rank; duels run "until satisfaction," sanctioned only by a noble witness; warrior academies forge nobles' children into "war heroes" through sanctioned brutality. + +**Sensory Samples (verbatim):** +1. "Once simply elegant, it had fallen into disrepair. With holes in the roof, paint flaking off the walls... The only thing that seemed new was the Hayfield family banner, flying proudly." (Ep 1) +2. "The life of a spiritual warrior is pain and survival. So training to be one should be no less rigorous." (Ep 1) +3. "...a white sword tilled a golden field." (Ep 3, Hayfield crest) + +**Drift tripwires.** Becomes modern/urban | guns or gunpowder | a benevolent fair justice system | duels without the "until satisfaction" code | power untethered from social rank. + +## Tone Constraint +Grim feudal cruelty lightened by genuine family warmth and Nathan's dry wit. Failure mode: tipping into pure grimdark (loses the hearth heart) or quippy power-fantasy (loses the injustice that drives empathy). + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +A scrawny 12-year-old, Nathan Hayfield, is goaded into a duel by the bigger, noble-backed bully Jason Clay, who insults his father and sister. The crowd jeers; the headmaster refuses to stop it ("until satisfaction"). Jason methodically breaks Nathan's bones, ignores his yield, and crushes his skull. Nathan is carried home to Dunshire and **dies** in his sister Amelia's arms. Then a blue light pours from his mouth, his corpse levitates, a shockwave is felt across the world by every powerful mage — and the dead boy's eyes open. + +## First 5 episodes *(the first sitting)* +A memory-less warrior soul now inhabits Nathan. He recovers his "host's" memories piecemeal, overhears the Ravens pressuring his father Sir Ulrich to renounce nobility, and vows to defend the family. He discovers the **Power of Asura** (Fist, Eye, Razor Finger). He returns to the Academy of the Mystic Blades, faces the headmaster, reunites with loyal friend Baelor, and — when Jason kidnaps Baelor as bait — duels and defeats Jason easily, then kills him to save Baelor's throat (Ep 5). + +## First 20 episodes *(texture band)* +Cedric Raven lies about the duel; only Stewart Lightstone (star pupil, High Lord's son) intervenes to save Nathan (Ep 7), seeding the Lightstone alliance. Nathan returns home a folk hero, trains in secret (weighted hikes, Mount Dun, alchemy), and over a **two-year time skip** (Ep 12) rises from Beginner to Master rank while hiding his true strength. He gifts Baelor a sword technique; the Clays send the assassin Mordrid after Amelia (Ep 16); a spiritual-warrior **examination** looms where Nathan ranks 8th (Ep 19–24), drawing the attention of the Doom Faction. + +## HARD BLOCKS *(opening-binding)* +1. **Nathan is a foreign warrior soul in the original Nathan's dead body.** The whole premise; the original boy is gone. +2. **The family must NOT know about the soul swap.** Load-bearing secret driving Nathan's guilt and every deception. +3. **Power runs on a fixed ladder (Beginner→Apprentice→Master, numbered tiers); leveling slows at Master.** No instant omnipotence. +4. **Nathan starts physically weak — a child's broken body.** His edge is skill/Asura, not size; early spells can't even harm. +5. **Asura is channeled by name and learned through meditation/practice.** It is not free or limitless. +6. **The world is medieval-feudal; rank = power = survival.** No modern tech, no fair impartial justice. +7. **Priscilla (the mother) is dead before ep 1.** Her death is an open mystery, not a living character. + +## Entry map *(tease ok, anchor flags)* +- **Power of Asura (named techniques)** — enters ~ep 3 (first conjured in the clearing). *Anchor for any promo.* +- **Asura Eye (lie/intent detection)** — enters ~ep 3. +- **Two-year time skip / Master-rank Nathan** — enters ~ep 12. *Flag if a promo anchors on grown-strong Nathan; opening Nathan is a weak child.* +- **Mordrid the assassin / threat to Amelia** — enters ~ep 16. +- **Doom Faction trial / Duke-title prize** — enters ~ep 24, escalates ~ep 65. *Tease only.* +- **Cross-region survival "card" trial / frozen tundra / Howlslanders** — enters ~ep 91–100. *Tease only.* + +## Engines the opening supports +1. **Reborn / Second-Chance Underdog (UNTESTED):** dead-weakling-reborn-as-master opens an instant transformation loop from the cold open's death. +2. **Hidden Identity (UNTESTED):** the soul-swap secret the family can never learn is a permanent dramatic-irony engine. +3. **Injustice-Revenge (UNTESTED):** noble bullies murder a child with impunity; the system protects them — primes the empathy-to-payback loop. + +## IM sources — opening window +- **The duel-murder of a yielding child** (Ep 1): Jason ignores "I yield" and crushes Nathan's skull as the headmaster watches. *Injustice, T1* +- **The system protects the killer** (Ep 6): Cedric lies, the headmaster calls Baelor's throat-wound "counterfeit." *Injustice, T1* +- **Ravens pressure a grieving father to renounce his nobility** (Ep 2): "withdraw your nobility... or who knows?" *Injustice, T2* +- **Assassin sent to murder the sister in her sleep** (Ep 16): "I want her to suffer." *Injustice, T2* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** a powerless, honorable child is beaten to death for sport by a noble-backed bully while authority refuses to intervene — and the system then shields the killer. +- **T2 (supporting):** the corrupt powerful houses (Raven/Clay) hunt the whole broke, honorable family — father, sister — to seize their land and erase their name. +- **T3 (deepening):** Nathan must hide his power and his true identity, swallowing every taunt and grief alone, unable to claim even the family he's fighting for. +- **Drift risk:** if a promo leads with Nathan's strength/wins instead of the helpless injustice, it kills the empathy nerve and the completion/CTI collapse. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **Who killed Nathan's mother, Priscilla?** — pays off deep (past ep 65; drives the Doom Faction arc). An open murder mystery; Nathan joins the trial partly to hunt her killer. +2. **Will the family ever learn Nathan isn't really Nathan?** — open through ep 100+. The dramatic-irony loop seeded from ep 2; Ulrich nearly suspects ("reborn that day," Ep 9). +3. **Can a near-commoner boy win the Doom Faction Trial and a Dukedom?** — pays off ~ep 24→trial arc (ep 65+). Prize: title of Duke + a fiefdom, restoring House Hayfield. +4. **The fall of House Raven** — pays off ~ep 61 (Nathan slays Remus Raven, becomes "the Demon Knight"). Can be *teased* as the looming siege of Dunshire; never deliver the kill. +5. **What was Nathan's original life / where did the warrior soul come from?** — open indefinitely; the star-ocean of lost souls (Ep 9). The deepest identity hook. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Nathan win by brute strength** — his edge is always technique, Asura, deception, and reading the enemy. +- **The show never resolves the soul-swap to the family within the opening** — the secret stays a secret; reveal would break the core engine (promote to HARD BLOCK #2). +- **The show never grants instant power** — every level is earned through training/combat on the ladder; gains slow at Master. +- **The show never makes the justice system fair** — appeals to honor codes only work via leverage/allies, never neutral fairness. +- **Asura never becomes a generic "anything" power** — it manifests as specific named techniques with practice cost. + +--- + +# LAYER 3 → companion: `world_soaw_deep.md` · *on demand only* + +> Full cast (Hayfield household, House Raven, House Clay, allies, factions) · power-ladder mechanics · Asura technique list · Calandrian geography/factions · examination & Doom-Faction-trial structure · late-arc characters. Pulled only on a canon question or W5 deep-dive. + +--- + +**Cross-show contamination:** checked against the `series_worlds.md` index — clean. "Asura," "Doom Faction," "Calandria," "House Raven/Clay," and "Soul of a Warrior" are unique to SOAW; the generic reborn-warrior + academy + family-siege frame overlaps thematically with SoW's listed pillars (this IS SoW) but no naming or canon collision with MVS, SS, WBT, FB, etc. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_soaw_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_soaw_deep.md new file mode 100644 index 0000000..4258ec3 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_soaw_deep.md @@ -0,0 +1,91 @@ +# SOAW — Soul of a Warrior — Layer 3 Deep Companion + +> On-demand reference only. Reference-formatted (tables/bullets). Holds everything pulled out of the working doc: full cast, mechanics, geography, late-arc material. Source-built from eps 1–100; later items lightly sampled — confidence drops past ep 65. + +--- + +## Cast + +### House Hayfield (the protagonist's family) +| Name | Role | Notes | +|---|---|---| +| **Nathan Hayfield** | Protagonist | Foreign warrior soul in the dead boy's body; rises Beginner→Master; "the Demon Knight." | +| **Sir Ulrich Hayfield** | Father | Honorable, guileless knight; poor manager/farmer; reaches Master level 1 by ep 12–16; loses an eye in the Dunshire raid (ep 61). | +| **Amelia Hayfield** | Older sister | Late-teens; kind, strong-willed; trains as a healer under Sir Yara Shira; Beginner level 2 (refuses to harm). Mordrid's assassination target (ep 16). | +| **Priscilla Hayfield** | Mother (deceased) | Died before ep 1; a hostess "of all time"; her killer is a central mystery. | +| **Old Billy Hayfield** | Family steward | "Old/Uncle Billy"; white-haired, comic, gossipy; plays a (bad, then better) flute; leads the crypt last-stand (ep 60). | + +### Allies +| Name | Role | Notes | +|---|---|---| +| **Baelor Graham** | Best friend | Blonde mop-haired commoner; loyal, leaves the Academy with Nathan; trained by Nathan; gifted the "Demonic Parry" technique; reaches Beginner 5–6. Father: **Podrick Graham**. | +| **Stewart Lightstone** | Noble ally | Star pupil of Mystic Blades; son of **High Lord Lucius Lightstone** (strongest lord in Godricsland under the Duke, Master 3). Saves Nathan in ep 7; pledges the Lightstones as friends. | +| **Hagar Haroldson** | Friend | Son of a Duke (Haroldsland); high-level apprentice; brings news of the Doom Faction Trial (ep 65); Nathan protects him in the trial. | +| **Sir Yara Shira** | Healer | Bald, mustached; treats Nathan post-death; Amelia's mentor. | +| **Hilda Moonweaver** | Townsperson | Dunshire's busybody "town aunt"; brings buns to fish for gossip. | + +### House Raven (primary antagonists, opening arc) +| Name | Role | Notes | +|---|---|---| +| **Remus Raven** | High Lord Raven | The looming dread of the opening; covets Hayfield land; rumored advancing to Master 3. Slain by Nathan ep 61 (decapitated). | +| **Cedric Raven** | Son | Powerful older student; lies to frame Nathan's duel as murder (ep 6); slain ep 60. | +| **Grimgor Raven / Arturius Spellwright** | Envoys | Deliver the "renounce nobility" offer (ep 2). Grimgor dies ~ep 52. | +| **Claudius Raven / Elder Colm** | House warriors | Appear in the Dunshire raid (ep 60–61). | + +### House Clay (secondary antagonists, opening arc) +| Name | Role | Notes | +|---|---|---| +| **Jason Clay** | The bully | ~15; murders Nathan in the cold open; killed by Nathan ep 5. | +| **Lord Byrum (Byron) Clay** | Patriarch | Master level 1; sends Mordrid after Amelia (ep 16). | +| **Golden Axe** | Byrum's brother | Bald, bearded, great battle-axe; renowned blade. | +| **Michael Clay** | Eldest son | Resembles Jason; wants to kill Nathan personally. | +| **Mordrid Daggath** | Sellsword assassin | All-black, throwing knives; Apprentice level 9; sent to murder Amelia, caught by Nathan (ep 16). | + +### Other houses / figures +- **House Crane** — Carleton Crane & son John Crane (rank 1 / bottom of the exam, comic foil). House Crane cuts a deal with House Raven (ep 14). +- **Headmaster Drogan Blackwood** — runs the Academy of the Mystic Blades; a Raven servant; the gold "Blackwood orchid" pendant. +- **Duke Godfrey Godricson** — Duke of Godricsland; proponent of "righteous justice"; humbled by Nathan in a duel ~ep 77; grandson **Alexander** befriended ~ep 78. +- **Factions:** the **Doom Faction**, **Eternal Faction**, **Neverwinter Faction** — great power blocs whose elders felt the resurrection shockwave (ep 1). + +--- + +## Power & progression mechanics + +**Spiritual-warrior ladder (low→high):** Beginner (levels 1–9+) → Apprentice (1–9) → Master (1–7+). Leveling slows dramatically at Master; the only true gauge of a Master's level is battle. Combat against strong foes is the fastest way to advance. + +**Examination ranks (student exam, ep 19–24):** ranked 1 (worst) up to 8 (exceptional). Rank 6 ≈ future Apprentice; rank 7 ≈ Master potential; rank 8 (Nathan) ≈ medium Master potential — strong enough to elevate a whole house. No one scored 7 in Nathan's year. + +**The Power of Asura.** A rare spiritual magic invoked by speaking "Asura," capable of overpowering higher-level opponents who use weaker magic; accelerates leveling. Named techniques seen: +- **Asura Fist** — blast of blue energy from the knuckles. +- **Asura Eye** — vision overlay revealing emotions/motives/lies and warning of nearby killing-intent. +- **Razor Finger** — extends the cutting power of an object; first step toward the **Asura Slaying Blade**. +- **Asura Speed Slice** / **Asura Weakening Aura** — fast cutting strike + an aura that suppresses an enemy's spiritual energy (ep 61). + +**Alchemy.** Nathan retains intuitive alchemy: **Dexterity Elixir** (temporary reflex/skill boost, fatigue after), healing **potion of internal healing**, etc. Ingredients named: Flaming Flower, Frozen Grass, Bitter Nut Milk, Ginger Root, Dragonweed, honey pepper thorns. + +**Soul mechanic.** The resurrection (ep 1) is felt worldwide as a shockwave. Nathan can meditate into an "endless ocean of stars" of lost souls but cannot find his own origin (ep 9) — his pre-life is unknown. + +--- + +## Geography (Kingdom of Calandria) +- **Dunshire** — Nathan's home hamlet in the fiefdom of **Godricsland**; overlooked by **Mount Dun(n)**, Nathan's training peak (ancient broken bridge/ruins). +- **Godricshall** — the great central city; keep called the **Owl's Eye**; the Academy of the Mystic Blades; heart of commerce among the four fiefdoms. +- **Calandria** spans (per Ulrich's map, ep 8): **Mount Cal** (W), **Haroldsland** (N, snowy — Hagar's home), **Howlsland/Howlsland** (S), **Skylarland** (E), **Godricsland** (center). Capital: **Calandriana**. Beyond: **Vasslan**, **Aeonia/Aeonian Universe** (the wider cosmos). + +--- + +## Late-arc material (ep ~57–100 — tease-only in promos) +- **Dunshire raid & the fall of House Raven** (ep 57–61): House Raven besieges Dunshire; Old Billy's crypt last-stand; Nathan returns, slays Cedric then Remus, earns the epithet **"Demon Knight."** Ulrich kills Claudius Raven; loses an eye. +- **Duke Godricson arc** (ep 65–80): Nathan travels to the trial; humbles the Duke's spoiled grandson, then the Duke himself in a duel; gains noble steed **Ghost Walker**; allies with grandson **Alexander**. +- **Doom Faction Trial** (ep 65→): a survival contest open to warriors up to age 20; thousands compete; winner reportedly granted the title of **Duke** + a fiefdom. Nathan enters partly to hunt his mother's killer. +- **Cross-region "card" survival** (ep 83–95): contestants hold a personal playing card, accumulate points by collecting/winning cards from others, and "cross over" between regions via spiritual-energy portals overseen by a **Trial Judge**. Nathan crosses early and repeatedly, drawing the factions' attention. +- **Frozen Tundra / Howlslanders** (ep 96–100): a deadly cold region; brutish Howlslander warrior packs; Nathan falls gravely ill (fever) and is sheltered by **Artemis** (a steward's outcast son) in a canopy treehouse; **Halifax the Raven** appears (ep 96). + +--- + +## Flavor / tone notes +- Register is heightened pseudo-Shakespearean in dialogue ("thee/thou," "I cry your mercy," "boon companion," "until satisfaction") against Nathan's dry modern interior monologue. +- Recurring motif: **the broken training sword** Nathan stabs into the ground as a monument to the boy he replaced (ep 2) — the only monument to the *original* Nathan. +- Family-hearth warmth (parties, parlor games, cake, Old Billy's flute) is deliberately woven between the cruelty as the emotional ballast. + +> **L3 note:** This companion is the relief valve for the capped working doc (`world_soaw.md`). Names/levels past ~ep 65 are sampled, not exhaustively verified — confirm against source before treating a late-arc detail as load-bearing. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ss.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ss.md new file mode 100644 index 0000000..368f80b --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ss.md @@ -0,0 +1,116 @@ +# SS — Shadow Slave — Series Worlds Entry + +> **Opening anchor:** first 5 min = police-station surrender / first 5 eps = slave-caravan First Nightmare / first 20 eps = Aspect reveal → Academy. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_ss_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 rebuilt verbatim from eps 1–20; Layer 2 confirmed against full eps 1–100. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and at the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion and loads on demand only. + +--- + +# LAYER 0 — ESSENCE · *the only default load · ≤ ~550 words* + +## Three Pillars (locked) +1. **Weak to Strong (protagonist at zero, orphan bg)** *(Thruline — "everyone has been written off as worthless")* +2. **Nightmare Spell / Dream Trials** +3. **Hidden Identity (Shadow God / Powers)** + +## Protagonist — Sunny (Sunless) +**Identity.** An 18-year-old outskirts orphan, malnourished and mistaken for a child, who surrenders to police as a Nightmare Spell carrier expecting to die. His First Nightmare drops him at the worst possible start — a chained slave with the "useless" Temple Slave Aspect — and he survives by scheming. Secret Identity + Underdog Awakening: the useless Aspect is secretly Divine. +**Combat.** Fights with his mind, not strength. Small and weak and stays that way; weaponizes everything — chains, gravity, poison, a blind tyrant's deafness, other people. Ambush and misdirection over confrontation. +**Power Source.** Temple Slave Aspect evolved to **Shadow Slave (Divine)** after he bled on a dead Shadow God's altar. He has a **Shadow Core**, not a soul core — fueled by Shadow Fragments earned by killing, never soul shards. Innate ability **Shadow Bond** is a trap: anyone who hears his True Name (Lost from Light) enslaves him absolutely. He CANNOT lie, absorb soul shards, or use his Aspect openly. +**Voice.** A self-talking schemer — sardonic, darkly funny, defiant under humiliation, never cocky. Complains while still moving; survives out of spite. Bitter humor as armor; a predator pretending to be prey. + +**Voice Samples (verbatim — never paraphrase):** +1. "You people… Look at you! Planning to kill me and still insist on having a good excuse. How very convenient! I hate hypocrites like you the most." (Ep 13) — defiance +2. "But then I changed my mind. Somewhere along the way, I decided to survive. I must survive, no matter what." (Ep 13) — core motivation +3. "No. To spite you all." (Ep 13) — survival contract +4. "In my world, people had thousands of years to turn cruelty into art. And as someone on the receiving end of all that cruelty… don't you think I would know more about being vicious than anyone ever could?" (Ep 14) — survivor philosophy +5. "Your breasts." (Ep 17) — the Flaw forcing truth + +**Drift tripwires.** Becomes cocky | reveals Aspect/True Name casually | wins by force | self-frames as chosen | shows mercy for emotional reasons | shadow described as powerful at entry (it's barely learned to move). + +## Setting — Entry-Window World +**Feel.** Three phases: (1) a gray, resource-scarce real world — outskirts stench, a police-station vault with armored walls and turret nests; (2) the First Nightmare — a moonlit slave caravan chained on an icy mountain pass, a ruined black-marble temple at the peak; (3) the Awakened Academy — a red-gated fortress-city of snow and alloy. Power is brutal and unquestioned; trust is fatal. + +**Sensory Samples (verbatim):** +1. "The skies were black… its light was not enough to pierce the darkness that enveloped the mountain. Only Sunny's eyes seemed to be able to do so." (Ep 10) +2. "Its colossal columns and walls were cut from black marble… it looked like a palace of a dark god. At least it did once. Now, the temple was in ruins." (Ep 14) + +**Drift tripwires.** Sunny safe in sunlight | creatures showing mercy | allies fully trustworthy | outskirts as poor-but-noble | Academy as safe haven | Sleepers respecting Sunny (fear, not respect). + +## Tone Constraint +Target is **"darkly funny adventure in a terrifying world,"** never "horror survival." Promos MUST counterbalance the dark world with Sunny's sardonic monologue and the shadow's silent comedy. Failure mode: unrelieved grimness reads as suffering, tanks the Fun gate, kills CTI (the Police-Station promo proved this). + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate · ≤ ~750 words* + +## First 5 minutes *(the 50%-drop gate)* +Sunny sits outside a police station drinking real coffee he can barely afford, because "his life was about to end," then walks in and surrenders as a Nightmare Spell carrier. Strapped into a restraint chair in an armored vault, a gray-haired cop gives him survival advice as he fades into forced sleep. Cold, gray, claustrophobic, quietly unjust: a kid the world has written off, surrendering himself to die. + +## First 5 episodes *(the first sitting)* +The First Nightmare drops Sunny — against all "fair trial" rules — into a chained slave caravan on a freezing pass. His status reads the **useless Temple Slave Aspect** and three Attributes (Fated, Mark of Divinity, Child of Shadows — the last gives night vision). A blind **Mountain King** — a 4-meter tyrant that turns its kills into larvae — crashes from the sky. Sunny strangles a larva with his shackle chain (ep 4) and lassoes the tyrant off a cliff with a chain and a runaway wagon (ep 6–7). Cast: slaves **Benny** (greedy coward) and **Fraser** (the Scholar, a hidden criminal), and **Gregor**, a young soldier who saves Sunny then plans to kill him. + +## First 20 episodes *(texture band)* +Sunny poisons the slavers' water with Bloodbane berries; it fails on Gregor (Awakened core), so he baits the blind tyrant onto Gregor instead (ep 14). Dying, he reaches the ruined temple, bleeds on the altar, and the dead **Shadow God** tears the tyrant apart. Appraisal "Glorious": True Name **Lost from Light**, Aspect evolves to **Shadow Slave (Divine)**, Flaw **Clear Conscience — cannot lie** (ep 15–17). He wakes in the vault, greeted by **Master Jet** (Ascended, outskirts-born), enrolls at the **Awakened Academy** (4 weeks to the solstice), meets silver-haired **Nephis** and blind **Cassie**, and builds a "pathetic lunatic" cover (ep 18–21). + +## HARD BLOCKS *(opening-binding)* +1. **True Name (Lost from Light) must never be spoken to another character as a resolved reveal.** Anyone who hears it enslaves him via Shadow Bond — the spine of the series. Near-exposure (tease) is fine; outing him breaks it. +2. **Sunny cannot lie (Flaw: Clear Conscience).** Direct questions force a truthful answer; he can only bend the *wording* through pain. He deceives via misleading truth, never a lie. +3. **His Divine Aspect must stay secret.** He performs as a pathetic outskirts rat — even publicly "claiming" a Divine Aspect because no one believes him. Load-bearing cover. +4. **Shadow Core, not soul core.** He CANNOT absorb soul shards; he gains Shadow Fragments only by killing. Unique progression — don't write him farming shards. +5. **The shadow cannot speak or touch the material world.** Silent body-language only; it passes through objects. +6. **Sunny is physically weak and stays weak.** Power is shadow-enhancement and tactics, not muscle (raw punch 9; doubled to 18 only via shadow). + +## Entry map *(where deeper elements enter — tease ok, anchor flags)* +- **The independent Shadow (personality — facepalms, shrugs)** — enters **~ep 18** (police-station shower, post-First-Nightmare). NOT in the opening bands. *Anchoring a pre-Aspect promo on the living shadow flags.* +- **Divine Aspect / True Name / cannot-lie Flaw** — ~ep 15–17. +- **Nephis** — ~ep 19; Immortal Flame lineage revealed ~ep 27. **Cassie (blind oracle)** — ~ep 19; powers ~ep 35+. **Caster (Ascended Legacy)** — ~ep 26. +- **Dream Realm / Forgotten Shore / dark-sea labyrinth** — ~ep 30. **Echo (monster mount)** — ~ep 47. **Carapace Demon** — ~ep 63. **Blood Weave / Memory-sight** — ~ep 81. + +## Engines the opening supports +1. **Underdog Awakening (PROVEN):** zero-resource kid, "useless" Aspect, survives a tyrant by wit. First Nightmare is a clean Journey. +2. **Secret Identity (PROVEN):** Divine Aspect + True Name + can't-lie = a triple-layered near-exposure engine, comedy-fueled at the Academy. +3. **Revenge / Justice Denied (MODERATE):** "to spite you all" — his bond to the world is adversarial. + +## IM sources — opening window +- **Useless Aspect reveal** (Ep 2): the Spell mocks it as a "useless wretch." *System Discovery, T2* +- **Mountain King crashes from the sky** (Ep 4): blind 4-meter tyrant, larvae from its kills. *Power-Ceiling, T1* +- **Chain-lassoes the tyrant off a cliff** (Ep 6–7): chains + wagon + gravity. *Status Inversion, T1* +- **Shadow God's blessing** (Ep 14): a dead god's shadows tear the tyrant apart. *World Border, T1* +- **Divine Aspect + cannot-lie Flaw** (Ep 15–17): the most cunning character can never lie. *System Discovery, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the world has written Sunny off as disposable — orphan, slum rat, "not even people," surrendering himself to die before the story starts. +- **T2:** the Spell rigs his trial — worst possible start (chained slave + "useless" Aspect) where everyone else gets a fair shot. +- **T3:** every ally is a potential killer (Benny, Fraser, Gregor all turn on him); trust is punished. +- **Drift risk:** open on monster spectacle and skip the "written-off" injustice → strong engagement, dead CTI (Police-Station failure). + +--- + +# LAYER 2 — RAILS (eps ~20–100) · *load at W1 (threads) + canon gate (limits) · ≤ ~400 words* + +## 2a · Conversion Threads +1. **Will anyone discover his Divine Aspect / True Name?** — runs the whole show, paid off in near-misses at the Academy (~ep 21) and Caster's suspicion (~ep 27). The engine; tease, never resolve. +2. **What is the living shadow actually capable of?** — opens ~ep 18, escalates at the punching machine (~ep 27, doubles his power) and into scouting/enhancement on the Forgotten Shore (~ep 30+). The show's stickiest, most fun loop. +3. **Who is the silver-haired girl, really?** — Nephis revealed as the last heir of the legendary Immortal Flame clan ~ep 27; her healing-that-burns and self-resurrection pay off ~ep 95. +4. **What did the blind girl see?** — Cassie's oracle visions (the castle, the apocalyptic seven-seals prophecy) seed across ~ep 30–95; her "remember five" plan saves the group from the Soul Devourer ~ep 83. +5. **Can three weak Sleepers survive the worst region in the Dream Realm?** — the Forgotten Shore has NO Gateway (~ep 30); pays off ~ep 95–97 when they finally reach the cursed city's wall. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Sunny win by strength.** Every victory is a trick, a trap, or shadow-enhancement — never out-muscling an enemy. +- **The show never makes the Flaw go away or let him lie.** It's permanent; he only learns to bend wording. +- **The shadow never speaks and never physically affects matter.** Silent body-language only. +- **The Forgotten Shore never offers an easy exit.** No Gateway; reaching the cursed city wall is the end of the source window, NOT salvation or a way home. +- **Through ch 100, Nephis never dies and Sunny is never exiled / never lives alone with a "Black Knight."** That material is beyond this source — do not anchor on it. At ch 100 all three are alive together, meeting a friendly Awakened (Effie) at the city. + +--- + +# LAYER 3 → companion: `world_ss_deep.md` · *on demand only* + +> Holds: full cast · Spell/rank mechanics · Forgotten Shore geography/ecology · late-game ability sets · relationship maps · proven promo history · tonal execution guide. + +--- + +**Cross-show contamination:** checked against `series_worlds.md` index — clean. Shadow/Divine-Aspect/cannot-lie engine is unique to SS. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ss_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ss_deep.md new file mode 100644 index 0000000..65715ad --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ss_deep.md @@ -0,0 +1,141 @@ +# SS — Shadow Slave — Layer 3 Deep Companion + +> On-demand Layer 3 companion to `world_ss.md`. Reference-formatted; not in the default build path. Source-verified through ch 100. Pull only when a canon question, a W2 break-check, or a W5 deep-dive needs it. + +--- + +## Full Cast (eps 1–100) + +| Character | Enters | Role | Key source facts | +|-----------|--------|------|------------------| +| **Sunny / Sunless** | Ep 1 | Protagonist | Outskirts orphan, 18 (turns 19 ep 29). Mom "had a poetic soul" — named for a solar eclipse; little sister **Rain** left the family. Surrenders ep 1; True Name **Lost from Light** ep 15; Divine Aspect **Shadow Slave** ep 15. | +| **The old policeman** | Ep 1 | First kindness | Gray-haired vault officer; gives the only survival advice before sleep; "please don't die, Sunless." | +| **Benny** | Ep 2 | First-Nightmare slave | Shifty, greedy coward ("I once killed a man and took his boots" energy is Sunny's, not his); dies ep 10 falling off the mountain (poisoned + altitude). | +| **Fraser (the Scholar)** | Ep 2 | First-Nightmare slave | Tall, scholarly, gentle-voiced; a hidden criminal ("Your Grace") — Gregor knows his crimes and executes him ep 12. | +| **Gregor of the Nine** | Ep 2 | First-Nightmare soldier/antagonist | Handsome young soldier, Awakened Soul Core. Saves Sunny (throws him the shackle key ep 5), but plans to mercy-kill him over the "smell of blood." Sunny baits the blind Mountain King onto him; killed ep 14. *Sunny privately nicknames him "Hero."* | +| **Mountain King** | Ep 4 | First-Nightmare boss | Awakened **tyrant** (5 soul cores), 4 m tall, dirty yellow-gray fur, **five milky blind eyes** (it is blind — Sunny's key edge). Spawns larvae from corpses it kills. Killed by Shadow God's shadows ep 14. | +| **Master Jet (Ascended)** | Ep 17 | Mentor | Ascended (3 stars), government Awakened on watch duty; raven hair, icy-blue eyes. Outskirts-born like Sunny. First adult to treat him decently; recommends the Academy. | +| **Nephis (Changing Star)** | Ep 19 | Ally / parallel mystery | Silver-white hair, gray eyes. Last heir of the **Immortal Flame** clan (grandfather = first Master; parents = Smile of Heaven & Broken Sword, the first Saint). Clan destroyed, all Memories sold; arrived with nothing like Sunny. True Name **Changing Star**. Defeats every Sleeper on pure technique; loses narrowly to Caster (ep 27) without using her Aspect. | +| **Cassie / Cassia** | Ep 19 | Stakes / oracle | Beautiful, blind blue eyes (blindness is her Flaw — lost sight after First Nightmare). Ranked dead last among Sleepers. Oracle: sees Attributes, receives fragmentary visions. Has a loving family she misses; wishes Sunny "Happy Birthday" (ep 29) knowing things she shouldn't. | +| **Caster** | Ep 26 | Legacy / wildcard | Brown hair, green eyes, humble exterior. Ascended Aspect — superhuman **speed**. Han-Li-clan Legacy, publicly #2. Knows Nephis's true lineage, addresses her as "Lady." | +| **Instructor Rock** | Ep 26 | Academy authority | Giant, brown beard. Combat instructor; takes the Sleepers to see the Hollow (ep 29): "responsibility to survive belongs to the individual alone." | +| **Teacher Julius** | ~Ep 25 | Academy mentor | Wilderness Survival instructor, eccentric, only Sunny enrolled in his course. Skills he taught repeatedly saved Sunny in the Dream Realm; promised to push for a research-assistant slot. | +| **Carapace Demon (Lord of Ash)** | Ep 63 | Forgotten-Shore boss | House-sized, polished star-metal armor, eight legs, four arms (2 pincers, 2 scythes), **seven stars** on chest, horned. Guards the Soul Devouring Tree. Killed by Sunny + Nephis. | +| **The Soul Devourer / Soul Devouring Tree** | ~Ep 77 | Forgotten-Shore threat | Colossal Nightmare Creature disguised as a beautiful onyx-bark, scarlet-leaf tree; its fruit enthralls and erases memory. Cassie's "remember five" plan (ep 83) — embedding the number in Sunny's subconscious, trusting his Puppeteer's Shroud mind-protection — frees the group. | +| **Effie** | Ep 100 | First friendly human at the city | Tall, athletic, hazel eyes, brown braid, ancient bronze armor; cheerfully eating roasted monster meat and crunching bones in a wall tower. A local Awakened. The source window ends as the three meet her. | + +> **Removed / unconfirmed vs. existing doc:** "Auro of the Nine" (the soldier is **Gregor of the Nine**); **Gunlaug**, the **Black Knight roommate**, the **cursed-city solo-exile**, **Parrot Rock**, and Sunny "living alone/gone insane" — none appear in eps 1–100. The journey ENDS at ch 100 with all three alive, together, at the city wall. Treat all of that as **post-ch-100 / unverified** — do not anchor promos on it. + +--- + +## World Mechanics + +### The Nightmare Spell +- Appeared decades ago amid recovery from natural disasters and resource wars. Caused fatigue → unnatural slumber → death; the dead became Nightmare Creatures who overran militaries. +- The **Awakened** (trial survivors) stopped the rampage. Spell still infects randomly; carriers must surrender (Third Special Directive). Police vaults have armored walls, turret nests, restraint chairs. +- Falling asleep = entering the **First Nightmare** (a luck-dependent trial). Die inside → a Gate opens in the real world releasing a monster. Surviving Aspirants become **Dreamers/Sleepers**. + +### Power Hierarchy (human ranks) +Aspirant → Dreamer/Sleeper (survived First Nightmare; dormant core) → Awakened (survived Dream Realm via a Gateway) → Ascended/Master (Second Nightmare; physically cross worlds at will; 3 stars) → Transcendent/Saint (Third Nightmare; demigod; can carry others). Supreme/Sacred/Divine are theoretical — no human has reached them. + +### Aspect / Memory / Echo / Flaw / True Name +- **Aspect** ranks: Dormant, Awakened, Ascended, Transcendent, Supreme, Sacred, **Divine**. Types: combat / sorcery / utility. Sunny's evolved from Dormant Temple Slave to **Divine Shadow Slave** in one Nightmare — unheard of. +- **Soul Cores** = basis of power; improved by consuming **Soul Shards** from kills. Creatures hold multiple cores (beast 1 … tyrant 5 …). +- **Memories** = summonable magical items tied to a slain creature's essence; weightless, undetectable, can be carried to the real world. 7 ranks; tiered I–VII within rank. +- **Echoes** = extremely rare; a summonable creature companion forged from a kill. +- **Flaws** = the price of an Aspect Ability, received with the first ability; harmless → fatal. +- **True Names** = honorary titles; the highest mark of excellence. Sunny and Nephis both earned theirs in their First Nightmares (almost unheard of). + +### Sunny's exception +- **Shadow Core**, not soul core. Cannot consume soul shards; instead earns **Shadow Fragments** by killing (12/1000 at ep 16; 24/1000 by ep 47). Soul shards are currency only. +- **Shadow Control** ability: an independent shadow that scouts, shares his sight/hearing, enhances his body or weapons (raw punch 9 → 18 shadow-enhanced, ep 27), cannot speak, cannot touch matter. Snarky personality (facepalms, shrugs, pouts, thumbs-up, ignores him). +- **Transform Echo into a Shadow** option exists (ep 47) but costs 100 Shadow Fragments — unused in-window. +- **Blood Weave** (ep 81) — inherited Attribute; lets him see the inner structure of Memories (nexuses, enchantments, tiers). + +### Sunny's Memories (in-window) +| Memory | Rank / Tier | Type | Notes | +|--------|-------------|------|-------| +| **Silver Bell** | Dormant / I | Tool | From the dying veteran slaver (ep 8). Rings audible for miles; used to lure the blind tyrant onto Gregor. | +| **Puppeteer's Shroud** | Awakened / V | Armor | From Mountain King (ep 15). Enchantments: Enhanced Durability + **Doubtless** (small mind-attack resistance — what saved him from the Soul Devourer). | +| **Midnight Shard** | Awakened / III | Weapon | Tachi from fallen-star alloy. Enchantment **Unbroken** — won't break; greatly boosts the wielder near death if he refuses to surrender. | + +--- + +## The Dream Realm & The Forgotten Shore + +- **Dream Realm:** vast dead world; Sleepers enter on the first winter solstice after their First Nightmare and stay until they find a **Gateway** (exit = becoming Awakened). No fairness rules — any rank can appear anywhere. +- **Forgotten Shore:** an unknown, unmapped region with **NO Gateway** — everyone who arrives is trapped. Sunny, Nephis, Cassie spend ~2 months there. +- **Dark Sea:** tidal, tied to day/night. At night black water floods everything; at dawn it recedes to reveal the labyrinth. Hides colossal deep horrors. +- **Crimson Labyrinth:** vast maze of red coral-like material; all monsters Awakened-rank+. +- **Carapace Legion:** Scavengers (beasts) → Centurions (monsters) → the Carapace Demon. Cursed soldiers of a fallen **Starlight Legion**. +- **Headless Knight Statue:** ~200 m stone knight, seven stars on breastplate, head torn off — Sunny's first shelter (ep 31). +- **Ashen Barrow / Soul Devouring Tree:** hill crowned by the enthralling tree; the Demon is its guardian. +- **Giant beheaded goddess statue:** her outstretched stone hand (seven stars on the robe) is the trio's final refuge (ep 95–97); matches Cassie's "seven severed heads / seven seals" vision. +- **The cursed city + Crimson Spire:** walled ruin reached at ch 100; the Spire (seven locks) ties to Cassie's apocalyptic prophecy. The trio is on the wall, not yet inside, when the source ends. + +--- + +## Key Events Timeline (eps 1–100) + +| Ep | Event | +|----|-------| +| 1 | Surrenders at police station; enters First Nightmare. | +| 2 | Slave caravan; "useless" Temple Slave Aspect; time-reversal vision. | +| 4 | Mountain King falls from the sky; Sunny strangles a larva with his chain. | +| 6–7 | Chain + wagon + gravity drag the tyrant off the cliff (it survives — it's blind). | +| 8 | Mercy-kills the dying veteran; receives Silver Bell. | +| 10 | Realizes the tyrant is blind; Benny dies. | +| 12–13 | Gregor executes Fraser; Sunny reveals he poisoned the water; Gregor (Awakened core) is immune and wounds Sunny. | +| 14 | Sunny lures the blind tyrant onto Gregor; reaches the temple; Shadow God's blessing kills Mountain King. | +| 15–17 | Appraisal "Glorious"; True Name, Divine Aspect, Shadow Control, Flaw "cannot lie." | +| 18 | Wakes; in the shower his shadow facepalms — it's alive. | +| 19–21 | Academy; meets Nephis & Cassie; weaponizes misleading truth; "pathetic lunatic" cover. | +| 26–27 | Nephis vs. Caster; her lineage revealed; punch machine 9 → 18 via shadow. | +| 29 | The Hollow; winter solstice; all three enter the Dream Realm. | +| 30–31 | Drops onto the Forgotten Shore; dark-sea tidal cycle; headless knight statue. | +| 33–35 | First scavenger kills; Nephis & Cassie found in the labyrinth. | +| 47 | Receives an **Echo** (scavenger mount). | +| 52 | Achieves "clarity" near death. | +| 63 | Carapace Demon revealed. | +| 77–83 | Soul Devourer enthralls the group; Cassie's "remember five" plan saves them. | +| 81 | Blood Weave transformation — Memory-sight. | +| 88–89 | Build a boat from the Carapace Demon's bones. | +| 90–94 | Sail the dark sea; boat destroyed; battle in the depths. | +| 95 | Nephis crawls out half-destroyed and self-resurrects in white flame. | +| 96–99 | Reach the giant goddess-statue hand, then the cursed-city wall. | +| 100 | Meet **Effie**, the first friendly human at the city. Source ends. | + +--- + +## Relationship Map (ch 100 state) +- **Sunny ↔ Nephis:** respect forged in survival; she taught him to fight, he saved her from the Soul Devourer, she healed/self-resurrected. Distance remains — he doesn't fully trust her past. *(Both alive, together, at ch 100.)* +- **Sunny ↔ Cassie:** protective; he carries her, she engineers his escape from the Soul Devourer. She seems to know things about his future. +- **Nephis ↔ Cassie:** Nephis protects Cassie "because she wants to" — gave Cassie her armor, tied them with a golden rope. +- **Sunny ↔ Caster:** adversarial; Sunny self-humiliates to seem harmless. Caster knows Nephis's identity — a wildcard if he links them. +- **Sunny ↔ Master Jet:** mentor; outskirts kinship; "no one survives the Dream Realm alone." + +--- + +## Proven Promo History +- **Police Station:** $8.17 CPI, 10.80% CTI. Opening Compression, real-world infection/surrender. **Best engagement ever tested** (43.64% 3s play, 23.97% thruplay, 3.49% true completion) but **weak bottom-funnel** — felt like suffering, not adventure; only ~2 functioning IMs; Fun-gate failures on the most vivid moments. Lesson: lead with the written-off injustice + sardonic adventure tone, not horror spectacle. + +--- + +## Tonal Execution Guide (Adventure Frame) +Target: **"darkly funny adventure in a terrifying world."** Same material, adventure POSTURE. Five levers: +1. **Loot moments** — write Memory/Echo drops as curious "what is this?" discoveries, shadow inspecting them — not exhausted relief. +2. **Visible counters** — linger on the number climbing (punch 9→18; Shadow Fragments). Treat like a level-up. +3. **Discovery over dread** — the FIRST adjective for any new place/creature must evoke scale/beauty/strangeness, danger second. +4. **Agency over victimhood** — no beat sits in helplessness >1 line; the moment injustice lands, Sunny's scheming starts. +5. **Shadow as comedy companion** — visibly reacting at least every other scene; brief one-line insertions ("His shadow facepalmed."). + +**Scene check:** "Is this discovery or dread?" Dread on >2 consecutive scenes = Police-Station territory; reframe. **Beat-sheet check:** ≥2 comedy beats in the first third or it reads as suffering. + +--- + +## Flavor Notes +- **The Flaw is the hook.** Cannot lie → constant dramatic irony; every social beat is a minefield. Truth-as-deception is his signature move (publicly "claims" a Divine Aspect; no one believes him). +- **The shadow is a silent comedy partner** and the show's stickiest, most expandable IM vehicle. +- **Nephis is the inverse of her image** — a combat goddess who is socially a disaster, hiding a dead family and an agonizing Flaw (healing "burns alive"). +- **Cassie is never dead weight** — her oracle/"remember five" plan is Vol. 1's smartest move; underestimating her is a trap the show sets for the audience. +- **"To spite you all"** is the emotional contract — Sunny survives not because he deserves to but because the universe doesn't deserve the satisfaction of killing him. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_sw.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_sw.md new file mode 100644 index 0000000..5ba4139 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_sw.md @@ -0,0 +1,121 @@ +# SW — Strongest Warlock — Series Worlds Entry + +> **Opening anchor:** A young witch destroys her newborn's magic circuits to hide him, then he accidentally boards a wizard train and is sorted "Dud" in front of an academy that despises Duds. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_sw_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — L0/L1 built verbatim from ch 1–20; L2 sampled across ch 20–100. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and at the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion and loads on demand only. + +--- + +# LAYER 0 — ESSENCE + +## Three Pillars (locked) +> Canonical list: `three_pillars.md`. + +1. **Secret Identity (Ordinary masquerading as dud)** *(Thruline)* +2. **Underdog / Zero-Power Progression** +3. **Academy Hierarchy (Duds, Noble Factions, Institutional Injustice)** + +## Protagonist — Ethan Gremory +**Identity.** A farm-raised 17-year-old (ch 7), dark-blue hair, blue eyes. As a newborn his birth-mother destroyed his magic circuits with "Ars Vim Extermina" (ch 1) — he physically *cannot* use magic. He boards the wrong train by accident and is classified "Dud" only because a stranger's bracelet faked a spark. A powerless ordinary boy trapped among people who can each kill him with one spell. Fits Underdog Awakening + Secret Identity. +**Combat.** Farm-trained pitchfork fighting (positioning, attack-pattern reading, endurance), taught by his grandmother against wild animals. No magic of his own; wins by surviving. Weakness: the only one in any room who cannot cast. +**Power Source.** At entry: zero magic. His later ability is *absorption* — kiss a Witch, copy a portion of her power for a day, once per Witch per week, only Witches (ch 63). Borrowed, temporary, draining, socially impossible. Desperate and improvising, not powered up. +**Voice.** Awkward, comic-cowardly, self-aware; talks himself through fear; polite to elders, cynical about aristocrats; small when scared, matter-of-fact when protecting someone. + +**Voice Samples (verbatim — never paraphrase):** +1. "Grandma, I think I rode the wrong train." (Ch 6) — dawning dread under wonder +2. "Okay, Ethan, calm down. First, let's see if I am dreaming or not." (Ch 4) — self-talk managing shock +3. "D-Do you have a Pitchfork? I grew up on a farm, and it's the tool I am most familiar with." (Ch 9) — reaching for the familiar amid the impossible +4. "Stay close to me. I'll protect you." (Ch 10) — stepping into protection with no power +5. "I thought I was going to die. Professor, Um, is it possible to change academies? I don't really like doing things that can potentially kill me." (Ch 14) — comedy over real terror + +**Drift tripwires.** Displays magic casually | becomes a confident hero | relishes power | forgets his circuits are destroyed | speaks with authority | stops being afraid | wins by wand-casting | accepts that he belongs at the academy. + +## Setting — Entry-Window World +**Feel.** A hidden Magical World reached by underground train from an ordinary station. Brutal caste: ticket class sets carriage color, the Appraisal Stone sets your Manor and your worth. Pillars are celebrated; Duds are the openly-mocked "Drop Out" Manor. Authority is cruel-playful — the Headmaster forces a boy he knows shouldn't be there onto the stone; professors design a 99%-fail Initiation and sip coffee: "Life isn't always fair." Beauty masks predation (a dragon's eye at the window). + +**Sensory Samples (verbatim):** +1. "Three people riding on broomsticks, flew across the moonlit sky with determined looks on their faces... several colorful lights illuminated the heavens, as a battle between wizards and witches of two different factions was being waged." (Ch 1) +2. "An awkward silence descended upon the Plaza of Beginnings as everyone looked at the Appraisal Stone, and wondered what was wrong with it." (Ch 8) + +**Drift tripwires.** Academy becomes safe | Duds are respected | tests are fair | teachers protect students | hierarchy dissolves | the magical world feels welcoming. + +## Tone Constraint +Comedy carries the dread — Ethan jokes because he is terrified, and the world is funniest right before it turns lethal. Drop the humor and it's generic grimdark; drop the stakes and it's a gag reel. Hold both. + +--- + +# LAYER 1 — ACTIVATION CANON + +## First 5 minutes *(the 50%-drop gate)* +Cold-open prologue: a young witch fleeing pursuers lands at a farmhouse, weeps, and casts "Ars Vim Extermina" on her own newborn to destroy his magic circuits — "in order to let her child live." The baby screams; she flies away; a farm couple takes him in. The foundational sacrifice/injustice lands before the protagonist can speak. + +## First 5 episodes *(the first sitting)* +Ethan (17) is sent toward school by grandmother Agnes. At the station he collides with silver-haired Alice and they swap tickets — he boards the wizard train (Brynhildr Express) meant for her. A kind snack-lady senses he doesn't belong and gives him a black bracelet ("do not remove it... a good luck charm"). A dragon's eye fills his window. Professor Ophelia (Alice's aunt) realizes the swap and races a Gryphon — fighting a Red Dragon mid-flight — to stop him before the "Ordinarius" is screened. + +## First 20 episodes *(texture band)* +Four genius Pillars introduce themselves (Langston Kerr, Nicole Asta, Lily Langley, Kurt Hale) plus Ethan, mistaken as a fifth. The Headmaster forces Ethan's hand onto the Appraisal Stone; nothing happens — then the bracelet sparks "Dud," and Langston sneers "Filthy Dud." The Initiation (a 99%-fail zombie dungeon) follows: Ethan reunites with cousin Chloe (Fire Mage, fox familiar Kon) and the depleted Alice; Nicole solos the Boss in 10 seconds; Ethan beheads the Boss Zombie with a flaming pitchfork. He wins Fortis Dud's blue ring (it rejected even the Headmaster), moves into Dud Manor, reads the founder's quote (ch 14–15). At a wand shop (~ch 20) his wand's Mermaid Princess core kisses him in a vision. + +## HARD BLOCKS *(opening-binding)* +1. **Ethan's magic circuits were DESTROYED at birth** by "Ars Vim Extermina." Not a late bloomer or natural Dud — surgically powerless. Treating him as someone who "just hasn't unlocked it" erases the core tragedy. +2. **Ethan is an Ordinarius who arrived BY ACCIDENT** via the swapped ticket; the "Dud" reading came from the bracelet, not his power. Without it, memory wipe. His place is a concealed accident, not earned. +3. **Ophelia and Headmaster Rinehart know the truth and conceal it.** Exposing an Ordinarius means "a fate worse than death." The secret is load-bearing. +4. **No usable magic in the opening window.** Kiss-absorption is NOT established until ~ch 60+. An opening with him casting freely breaks the premise. +5. **The Appraisal Stone reads power, period** — the institution's instrument of caste; it cannot be made to "see his true potential." + +## Entry map *(tease ok, anchor flags)* +- **Cousin Chloe** — enters ~ch 9 (dungeon reunion). +- **Fortis Dud's blue ring** — enters ~ch 14 (Initiation reward). +- **Dud Manor / found family / Henry the prefect** — enters ~ch 15. +- **The Mermaid Princess wand core (first kiss vision)** — enters ~ch 20. +- **Origin Magic = kiss-absorption** — ~ch 63; Luna's awakening ceremony ~ch 60. *Anchor flag: never start a promo from the kissing power.* +- **Henry "The Mage Slayer" reveal** — ~ch 83. +- **Oberon's Descent / Fairy King power** — ~ch 77. +- **Lily's feral turn ("don't let me catch you or else")** — ~ch 98. +- **Zack Kerr's campaign to close Dud Manor + Appraisal-retake demand** — ~ch 62 / ~ch 98–99. + +## Engines the opening supports +1. **Underdog Awakening (UNTESTED):** zero-power farmboy among prodigies — every survival a miracle; the gap is structural. +2. **Secret Identity / Hidden Truth (UNTESTED):** an Ordinarius faking Dud-hood; exposure = memory wipe or worse. +3. **Injustice Engine (UNTESTED):** Duds are the despised bottom caste; tests are rigged; nobles want them gone. + +## IM sources — opening window +- **Birth-mother destroys his circuits to save him** (Ch 1): the screaming baby left on a doorstep. *Parental Sacrifice / Origin Wound, T1* +- **The Appraisal Stone: nothing happens** (Ch 8): hand forced on, silence, a faked spark — "A Dud?" / "Filthy Dud." *Public Humiliation / Hidden Rescue, T1* +- **Ophelia's race vs. the Red Dragon** (Ch 4–7): she fights a dragon to reach him first; the audience knows the danger he doesn't. *Dramatic Irony / Race Against Time, T1* +- **Dungeon Boss, three teens, one pitchfork** (Ch 13): Chloe and Alice collapse; Ethan beheads the Boss alone. *Team Combat Climax, T2* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** made powerless out of love, then dropped into a world that despises the powerless and labels him trash for it. +- **T2 (supporting):** the system is openly rigged — a 99%-fail test, professors who watch and shrug, a noble sneering "Filthy Dud." +- **T3 (deepening):** his presence is a secret crime; the people protecting him could also destroy him. +- **Drift risk:** leading with the kissing power or with Ethan winning sells a wish-fulfillment hero and buries the injustice that drives empathy → completion → CTI. + +--- + +# LAYER 2 — RAILS (ch ~20–100) + +## 2a · Conversion Threads +1. **Will Ethan's secret (Ordinarius, no circuits) be exposed?** — pressure escalates to a demanded Appraisal retake ~ch 98–99 (Langston's father among those demanding it). Sells the held-breath of a lie that could end him. *Initiate; never deliver the outcome.* +2. **How does a boy with no magic ever fight back?** — answer (kiss-absorption) lands ~ch 63. Tease the question; never explain the kiss-mechanic as the hook's payoff. +3. **Will the nobles erase Dud Manor?** — Zack Kerr's campaign to close the Manor and seize the academy escalates from ~ch 62. The found family itself is the stake. +4. **What is Nicole Asta really doing here?** — she throws a match and hides her true strength; her family's "other plans" stay unresolved through ch 100. +5. **Is sweet little Lily a monster?** — her feral turn detonates ~ch 98 ("don't let me catch you or else"). Tease the wrongness early; withhold the reveal. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Ethan grow real magic circuits or become permanently powerful.** His power is always borrowed, temporary, and costly. +- **The show never resolves the secret by having Ethan accepted as a rightful wizard.** The lie stays live. +- **The show never makes the academy fair or safe** — institutional cruelty is the engine, not a phase. +- **The pitchfork never becomes a magic weapon** — it's cold iron and skill; the mockery-to-payoff is the point. +- **Ethan never stops being afraid** — courage here is acting *through* fear, not the absence of it. + +--- + +# LAYER 3 → companion: `world_sw_deep.md` · *on demand only* + +> Full cast · world mechanics · geography · late-game abilities · relationships · flavor. Loaded only on a canon question, a W2 canon-break check, or a W5 deep-dive. + +--- + +**Cross-show contamination:** checked against `series_worlds.md` index — clean (academy-Dud premise is SW-specific; distinct from WBT rank/mushroom and FLBM beast-academy). diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_sw_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_sw_deep.md new file mode 100644 index 0000000..900f911 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_sw_deep.md @@ -0,0 +1,98 @@ +# SW — Strongest Warlock — Layer 3 Deep Companion + +> The on-demand L3 companion to `world_sw.md`. Not in the default build path — pulled only for a canon question, a W2 canon-break verification, or a W5 deep-dive. Reference-formatted; source-traceable. **Surname note:** "Quinn" is source-confirmed (Ophelia Quinn, ch ~24/line 1089; "Alice Quinn," ch ~38/line 2033 onward) — it simply does not appear in ch 1–20. The Mermaid Princess is **unnamed in source** ("the Mermaid Princess"); any proper name for her is a fabrication and is omitted here. + +--- + +## Full Cast (source-traced) + +| Character | Role | Key source detail | +|-----------|------|-------------------| +| **Ethan Gremory** | Protagonist | 17 (ch 7); dark-blue hair, blue eyes; farm-raised by Agnes & grandfather; circuits destroyed at birth (ch 1); sorted Dud via bracelet (ch 8); wins Fortis Dud's ring (ch 14); wand = Mermaid Princess rainbow-scale core (ch 20); Origin Magic = kiss-absorption (ch 63); achieves Partial Resonance (ch ~62) | +| **Agnes** | Adoptive grandmother | Trains Ethan in pitchfork/spear martial arts vs. farm predators; throws sandals; pulls a 2-meter spiked club "from under her skirt" (ch 1); wants him to marry a wealthy heiress | +| **(Adoptive grandfather)** | Family | Collected the fairy-tale books Ethan read; part of the Gremory line that knew of the Magical World | +| **Chloe Gremory** | Cousin / female lead | Light-brown hair, green eyes; cousin (their grandmothers are sisters, ch 14); Fire Mage; familiar = golden fox **Kon**; discovered she was a witch at 12 during a kidnapping/fire (ch 10); protective, embarrassed-puncher; wins Goblet of Fire artifact (ch 14) | +| **Alice (Quinn)** | Rival / reluctant ally | Long silver-blonde hair; cold; Ice Magic; daughter of the Minister of the Magic Bureau (ch 4); Ophelia's niece; swapped tickets with Ethan (ch 2); collapses from Mana Deficiency in the dungeon (ch 11); later contests Eques rep & beats Nicole (ch ~38, Nicole let her win) | +| **Nicole Asta** | Ally, hidden agenda | Long pink hair; Pillar (Eques); rapier + Shield of Aeneas (ch 14); soloed Initiation Boss in 10 sec (ch 12); Magic-Knight lineage; deliberately conceals true strength; family has "other plans" | +| **Lily Langley** | Pillar / wild card | Curly blonde hair; "cutest" first-year; Pillar (Jaeger); Appraisal showed a four-tailed white fox (ch 7); feral turn ch 98 ("don't let me catch you or else," line 5185) | +| **Langston Kerr** | Personal antagonist | Blonde, blue eyes; Pillar (Schwartz); Ducal family, son of Duke **Zack Kerr**; Dark/black-flame magic (Appraisal, ch 7); calls Ethan "Filthy Dud" (ch 8); "killed" in the Initiation dungeon (ch 12) then continues post-revival of the test | +| **Kurt Hale** | Pillar | Dark-brown hair, glasses (adjusts with middle finger); Pillar (Terra); thorned-vine/Nature magic (ch 7) | +| **Professor Ophelia Quinn** | Complicated authority | Alice's aunt; Brynhildr professor, newly Honorary Magistratus (ch 8); raced a Gryphon (Astraeus) and fought a Red Dragon to stop Ethan's sorting (ch 4–7); covered up the ticket swap; later buys his wizard tools | +| **Headmaster Rinehart Eques** | Institutional authority | Old wizard, long white beard; knows Ethan is an Ordinarius and forces the test anyway (ch 8); "Life isn't always fair" (ch 11); allows Ethan to stay | +| **Professor Njal Brand** | Faculty | Teaches Study of Magical Creatures; Jaeger advisor; escorted Ethan to the Plaza (ch 5) | +| **Beautiful red-haired Professor (Violet)** | Faculty | Gray clothes; ran the Initiation weapon room; gave Ethan the Moulding Ball (ch 9); "Is this the power of Love and Friendship? No — the passion of Youth!" (ch 13); later named **Professor Violet**, teaches Origin Magic (ch 32) | +| **Henry (Weiss)** | Dud Manor prefect / mentor | Head Prefect of Dud Manor; cooks for the camping trip; later revealed "**The Mage Slayer**" — Origin Magic nullifies all magic in his surroundings (ch 83); Axel Daniels concedes to him | +| **Noah** | Dud Manor ally | Relays academy news (ch 39) | +| **Luna** | Dud Manor / awakening | Moon Magic; performs the secret full-moon awakening ceremony that partially heals Ethan's circuits (ch ~60); his first (involuntary) kiss-source (ch 63) | +| **Axel Daniels** | Schwartz Fourth-Year | Faces Henry in the tournament and effectively concedes ("I don't like pain," ch 83) | +| **Koko ("Big Foot")** | Forest apex predator | White-Haired Gorilla; sentient, eloquent; pact with Rinehart not to eat students; "Out of all of you here, this boy here is the most delicious" (ch 46) | +| **Ruby / the Fairies** | Garden creatures / allies | Candy-obsessed; demand sweets ("If you don't want to get hurt, offer us sweets!" ch 30); their collective faith powers Oberon's Descent | +| **Oberon** | The Fairy King | Manifests through Ethan as "Oberon's Descent" (ch 77); grants Fae power, watches | +| **Cassandra** | Trinket Club president | Recruits Ethan as a product tester; senses something unusual about him (ch 36) | +| **Mr. Mason** | Wand shopkeeper (Sanders) | Identifies Ethan's wand core as a Mermaid Princess rainbow scale (ch 20) | +| **Robert** | Raven master (Limeburgh) | Senses "the stirring of a storm in Eastshire" around Ethan (ch 19) | + +--- + +## World Mechanics + +- **Magic Circuits.** Internal pathways channeling mana through a wand. Destroyed circuits = no magic (Ethan's condition, ch 1). "Ars Vim Extermina" destroys them permanently. +- **Appraisal Stone.** Basketball-sized white crystal; measures power at sorting; determines Manor (ch 7–8). Reaction = caste. +- **Origin Magic.** Each wizard/witch's unique signature (ch 32). Ethan's = **absorption**: kiss a Witch, copy a portion of her power for one day; once per Witch per week; only Witches (ch 63). Requires the partial circuit-healing from Luna's Moon ceremony to function at all. +- **Resonance.** Uniting Origin + Core (wand) magic. **Partial Resonance** (Ethan, ch ~62) is rare and extraordinary; the Mermaid Princess actively helps produce it. Not a repeatable spell. +- **Mana Deficiency.** Overuse → collapse (Alice, ch 11). +- **Spells (Latin-derived).** "Ars Vim Extermina" (circuit destruction), "Nubes Atra Fumus" (black smokescreen), "Ignis Fulmine" (fire bolt), "Imbre Glacies"/"Glacies Carcerem" (ice), "Silentium" (silence), "Ethan Principium"/"Inceptos Porta Aperiam" (ceremony/portal). + +--- + +## The Academy + +- **Five Manors**, each named for one of the Five Heroes who defeated the Demon Lord (ch 5): + - **Schwartz** (Agmundr Schwartz) — Dark/Black Magic; Langston's; ran this year's Initiation. + - **Terra** (Svend Terra) — Nature/growth; Kurt's. + - **Jaeger** (Magni Jaeger) — beast taming/transformation/summoning; Lily's; Prof. Njal. + - **Eques** (Eileifr Eques) — combat wizards/Magic Knights/Magistratus pipeline; Alice & Nicole's. + - **Dud** (Fortis Dud) — those with little/no magic; the "Drop Out" Manor; founded by the academy's creator. +- **Pillars.** Each year the top first-years (ages 15–17), tuition waived, 500 Gold Coins/month (ch 7). +- **Initiation Ceremony.** A dungeon designed by Schwartz to fail nearly everyone; zombies multiply the more magic you use; clear by finding the exit or surviving 2 hours (ch 9–13). +- **Currency.** 1 Gold = 100 Silver = 10,000 Copper; potato chips 5 Copper (ch 7 A/N). + +--- + +## Geography + +- **Eastshire** — the academy's territory in the Magical World (ch 19). +- **Brynhildr Academy** — ~500 years old (ch 6); reached via the underground **Brynhildr Express** from an ordinary station, then carriages by ticket class. +- **Great Eagle Forest** — surrounds the academy; home to Koko, the Fairies' Garden, Satyrs, treants; site of the Dud Manor camping trip (ch 43–49). +- **Limeburgh** — nearest town; Sanders (wand shop), Robert's Aviary, broom shop (ch 19–20). +- **Magic Bureau** — governs the Wizard World; Alice's father is its Minister (ch 4). + +--- + +## Key Items / Artifacts + +- **Black Bracelet.** Given by the train snack-lady; faked the Appraisal spark that read Ethan "Dud"; removal = memory wipe (ch 3, 8). +- **Moulding Ball.** Magical Cold Iron; becomes any visualized weapon; Ethan shapes it into his pitchfork (ch 9). +- **Fortis Dud's blue ring.** Storage space "the size of the training ground"; recognizes only chosen masters (rejected the Headmaster); seven abilities, six unknown; chose Ethan (ch 14). +- **Shield of Aeneas** (Nicole) / **Goblet of Fire** (Chloe) — Initiation rewards (ch 14). +- **White Pearls** — consumable light source ("Lux Aeterna" without magic) usable by Duds (ch ~32). + +--- + +## Relationships (source-grounded) + +- **Ethan ↔ Chloe** — cousins (grandmothers are sisters); childhood-close; she's protective and quietly smitten; called his "Summer Girlfriend" by village kids (ch 9). +- **Ethan ↔ Alice** — guilt/rivalry from the ticket swap; she knows the truth; transactional alliance. +- **Ethan ↔ Nicole** — she reads him as no fluke (ch 14); trains/observes him; agenda unknown. +- **Ethan ↔ Headmaster Rinehart** — Rinehart knowingly keeps the Ordinarius; protective in a cat-and-mouse way. +- **Ethan ↔ the Mermaid Princess (wand)** — first-kiss vision (ch 20); she coaches his Partial Resonance (ch ~62). +- **Zack Kerr ↔ Rinehart** — political: Zack moves to close Dud Manor and seize the academy (ch 62); pushes the Appraisal retake (ch 99). + +--- + +## Flavor Notes + +- **The pitchfork is a character statement, not a gag.** Cold-iron Moulding Ball shaped into the farm tool he trusts; he beheads the Boss Zombie with it (ch 13). +- **Comedy is load-bearing.** Agnes's spiked club, candy-extorting Fairies, a gorilla rating humans by taste — the world is likeable before it turns lethal. +- **The Fortis Dud parallel** — both Duds; the founder's quote "Heroes are ordinary people who make themselves extraordinary" (ch 14) is the thesis; spiritual-successor framing is subtext, not confirmed. +- **Ophelia's relief.** Her terror-to-relief at the "Dud" reading (ch 8) shows how close Ethan came to "a fate worse than death" — the hidden-rescue beat under the humiliation. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tbb.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tbb.md new file mode 100644 index 0000000..08e8958 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tbb.md @@ -0,0 +1,125 @@ +# TBB — The Billionaire's Bodyguard — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ep ~93 (verbatim eps 1–5, 35, 51–53; eps 6–93 sampled for threads/limits). +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_tbb_deep.md` (companion — build on demand). +> Status: DRAFT (source-built) · Confidence: High — L0/L1 traced to verbatim eps 1–5 + the pendant/cultivation reveals (35, 51–53); mid-run sampled for threads/limits. + +> **How this file is read.** L0 is the only default load. L1 loads at W1 + canon gate; L2 at W1 (threads) + canon gate (limits); L3 (companion) on demand. Build top-down; keep the top fast. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **Secret Bodyguard / Identity** *(character stakes)* **(Thruline)** — "everyone has had to hide who they really are to fit in where they don't belong." +2. **Jade Pendant / Dragon Mastery** *(fantasy element)* +3. **Elite School / Wealth Gap** *(setting)* + +## Protagonist — Brian Woods +**Identity.** Chinatown orphan, ~18, raised since age three by an old martial-arts master, **Samuel Lin**, on odd jobs (weaving straw slippers that sell for two dollars) and near-fatal "missions" Lin sends him on for a hundred or two hundred bucks. No parents — the thing he's "longed for his entire life" is a mother's embrace, a father's hand, things he's "only dreamed of but never truly known." Hired by billionaire **Robert Hart** as the **secret bodyguard** to Hart's daughter **Stella** — $30k/month, school fees and villa covered — under cover as her "study buddy." Nobody can know he's protecting her. Engine: **Hidden Identity / Secret Protector** — a battle-hardened nobody passing as a charity-case classmate inside a school full of heirs. +**Combat.** Elite, controlled, never showy. Disarms by precision, not force — a "subtle, no one saw it happen" ankle-tap that makes a bully stumble rather than fall. Reads a room before he reads a fight. Battle-tested in real warzones (refugee-camp rescue, Ep 1), so schoolyard thugs and entitled rich boys barely register as threats — a gap he finds almost absurd. +**Power Source.** Two linked artifacts, both earned at age eight in **The Dragon Cave of Mystics** (full-moon-only, "chosen one" prophecy): the **Mystic Jade Pendant** and the **Dragon Mastery Arts** scroll. The pendant houses the stored mind of an ancestor-master, **Eli Grayson**, and warns Brian of any nearby ill intent (a private pulse only he feels), remembers past threats, and hints at hidden opportunity — the ability that earned him the codename **"The Hawk."** The Dragon Mastery Arts is a leveled cultivation system reinforcing body, reflexes and energy channels; Brian is stuck at the late first level because the ordinary world is too energy-poor to break through. +**Voice.** Calm, dry, unbothered. Deflects status insults instead of escalating; quietly amused by people who think wealth equals power. Self-aware about being the poor outsider but refuses to perform gratitude or beg approval. + +**Voice Samples (verbatim — never paraphrase):** +1. *"If you're expecting me to beg for your approval, you'll be waiting a long time."* (Ep 3) — refuses to perform for the rich girl +2. *"Not a basement. Chinatown."* (Ep 3) — flat, unashamed of where he's from +3. *"My mistake. You see I seem to lose control of my legs when I see a good for nothing brat harassing a pretty girl."* (Ep 3) — dry cover for a deliberate move +4. *"I am no fool, and I am certainly not rich…"* (Ep 2) — self-placement, no self-pity +5. *"Two hundred dollars? After risking my life? That's all?"* (Ep 1) — the underpaid, overexposed life with Lin + +**Drift tripwires.** Brian openly flexing wealth or power | hero-confident swagger / one-liner bravado | begging or earning Stella's approval | revealing he's the bodyguard | a chosen-one who arrives already maxed (he's stuck at level one) | the pendant treated as a generic magic gadget rather than Eli's living presence | warzone past erased so the school is his first real danger. + +## Setting — Entry-Window World +**Feel.** **Aspen Hills**, "where all the rich people live." **Maple Grove Academy** — pristine gates, crisp uniforms, heirs who "barely glanced his way." Brian arrives in a wrinkled hoodie, faded jeans and scuffed sneakers; the contrast is the whole point. He lives in **Stella Hart's villa** (chandeliers, "expensive perfume and polished wood"), nominally her study buddy, sleeping in the guest room. Status is worn and visible: designer watches, who-gets-tossed-the-leftover-ribs (the dog, Phantom, got downgraded when Brian arrived), and the casual cruelty of guards and classmates toward anyone who looks poor. + +**Sensory / Status Samples (verbatim):** +1. *"Maybe he's here to beg for leftovers. Look at him—ragged hoodie, cheap sneakers, looks like he hasn't had a proper meal in days."* (Ep 2 — Hart Towers guards) +2. *"This… is the bodyguard my father sent?"* / *"You look like you just crawled out of a basement."* (Ep 3 — Stella) +3. *"The towering skyscrapers and sleek modern architecture stood before him, like something out of a sci-fi comic book."* (Ep 2 — Hart Towers) + +**Drift tripwires.** Maple Grove framed as warm/welcoming | the wealth gap softened or unstated | Brian comfortable and belonging on arrival | the villa as a reward rather than a cover post | classmates as peers rather than people who look down on him. + +## Tone Constraint +Grounded fish-out-of-water with dry comedy over a real-stakes spine — a warzone veteran undercover among soft, cruel rich kids, sitting on power he can't fully use yet. Never wish-fulfillment flex. The nerve is "the outsider everyone underestimates, hiding what he really is," not "secretly-rich badass humiliates the school for fun." If a beat has Brian enjoying dominance or showing off, the tone has slipped. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +North Sahara refugee camp under missile fire. Brian is mid-mission, hauling civilians out of the blast radius — *"Move now!"* The jade pendant, which has "always been there… guiding him," **flickers and surges like never before**, a warning he's never felt. He runs back into the flames for a trapped boy whose legs don't work, shields the child through an explosion, and revives him with CPR while the mother begs. Watching her hold her son makes Brian's eyes moist — a mother's embrace is the exact thing he's "never truly known." The opening establishes everything in one breath: the man is a battle-hardened protector, the pendant is alive and escalating, and the emotional wound is an orphan who saves other people's families. + +## First 5 episodes *(the first sitting)* +Brian returns to his Chinatown home and master **Samuel Lin**, who pays him two hundred dollars for nearly dying and reveals "the big mission": move to **Aspen Hills**, meet billionaire **Robert Hart**, no backing out (Ep 1). On the train he out-cons two scammers and befriends **Luke Hartley** (Ep 2). Hart hires him as **Stella's secret bodyguard** — cover story "study buddy," she can't know (Ep 2). At **Maple Grove Academy**, Stella rejects him on sight as beneath her standards; Brian quietly drops the campus heir **Peter Kingston** with one invisible move and refuses to beg for her approval (Ep 3). Ep 4 ("Kisses and Caves") flashes back to the **origin at age eight**: Lin knocks him out on **Starlight Peak** during the Mid-Autumn full moon, the **Dragon Cave of Mystics** opens to "the chosen one," and Brian takes the **Dragon Mastery scroll and jade pendant** from the altar, escaping before sunrise (or be trapped five years). Established here: Brian + the pendant, the secret-bodyguard cover, Maple Grove's wealth gap, Stella/Harper/Peter, and the cave/chosen-one backstory. + +## First 20 episodes *(texture band)* +Brian settles into the villa as study buddy and quietly outclasses everyone — fights (the bank attack, the kidnapping of Stella Hart, Eps 8–10) and academics alike (he re-solves Stella's exam more elegantly than the teacher, Ep 51 territory begins to seed earlier). The pendant's threat-sense keeps saving him and his friends; he's decoded **three distinct alerts** so far and still doesn't grasp its full power. His old comrade **Cody Marlow**, now a police captain, re-enters as an ally on the city's criminal side. The villa dog **Phantom**, Harper's needling, and Stella's slow thaw fill the texture. NOT yet entered: the pendant spirit **Eli Grayson** revealing himself, and the cultivation breakthrough — both land ~Ep 51–53. + +## HARD BLOCKS *(opening-binding)* +1. **Brian is undercover — nobody at school knows he's a bodyguard.** Robert's explicit terms: cover is "study buddy," "no one can know you're there to protect her" (Ep 2). A promo that outs the role to classmates breaks the core engine. +2. **Brian is dirt-poor and unconnected, not secretly rich.** Chinatown orphan, raised on two-hundred-dollar missions, wrinkled hoodie and scuffed sneakers (Ep 1–3). His power is *hidden*, his wallet is *empty*. Never write him flashing money or status. +3. **The pendant is a person, not a gadget.** It contains the stored mind of ancestor-master **Eli Grayson** (revealed Ep 51); its threat-sense ("ill intent → private pulse," memory of past attackers, opportunity hints) is exclusive to Brian and earned him the name **"The Hawk."** Don't reduce it to a glowing trinket or invent powers it doesn't have. +4. **Both artifacts were earned at age eight in the Dragon Cave of Mystics.** Full-moon-only, "chosen one" prophecy, scroll + pendant from an altar, escape-before-sunrise rule (Ep 4 flashback). Not a gift, purchase, or random find. Tonally load-bearing origin. +5. **Brian is stuck at the late first level of the Dragon Mastery Arts.** He cannot break through because the ordinary world is too energy-poor; the jump only comes inside the pendant's Mystic Space ~Ep 53. He is *not* a maxed chosen one at entry — the ceiling is visible but withheld. +6. **The threat is real and external, set up before the school.** Stella is "in a lot of danger" (Robert, Ep 2); Brian comes from actual warzones (Ep 1). The school is the cover, not the source of stakes. Don't make Maple Grove drama the whole world. + +## Entry map *(tease ok, anchor flags)* +- **Stella's slow thaw / "he actually cares"** — seeds Ep 3, builds through ~Ep 51. *Opening-safe to initiate, never resolve.* +- **Cody Marlow (cop ally) & city crime line** — ~Ep 7–10 (bank attack, kidnapping). *Opening-safe.* +- **Pendant decodes / threat-sense saves** — recurring from Ep 1. *Opening-safe.* +- **Eli Grayson revealed inside the Mystic Space** — ~Ep 51. *Tease only — NOT in 1–20.* +- **First cultivation breakthrough (level 1 → next)** — ~Ep 53. *Tease only.* +- **Dragon Mastery second level / Dragon Cave's deeper secrets** — post-Ep 53. *Tease only.* +- **Romance escalation (fake-boyfriend arc, jealousy)** — ~Ep 71, 85. *Anchor flag: mid-run.* + +## Engines the opening supports +1. **Hidden Identity / Secret Protector (PROVEN spine):** the whole show is a warzone veteran passing as a charity-case study buddy. Strongest fit; the cover IS the premise. +2. **Underdog / Looked-Down-On Outsider (PROVEN top-funnel):** poor Chinatown kid among heirs who openly sneer; status is worn and visible, so every quiet win lands. Strong fit, drives the Thruline. +3. **Hidden Power / Secret Advantage (MODERATE):** the pendant and Dragon Mastery are concealed; he underplays them. Support, not spine — and he's not yet maxed. +4. **Bond / Mentor (MODERATE — Brian + Eli/Lin):** Samuel Lin's gruff raising and Eli's sardonic pendant-mentoring are the emotional core once revealed. Tease in the opening; pays off ~Ep 51. + +## IM sources — opening window +- **The refugee-camp rescue** (Ep 1): runs into flames for a stranger's child, revives him, grieves a family he never had. *Cost-of-Entry / Empathy, T1* +- **Two hundred dollars for risking his life** (Ep 1): the orphan exploited by the only family he has. *Injustice / Status, T1* +- **Guards mock him at Hart Towers** (Ep 2): "beg for leftovers… find that invite in a dumpster?" *Injustice / Status, T1* +- **"You look like you just crawled out of a basement"** (Ep 3): publicly written off by Stella on arrival. *Injustice / Status, T1* +- **The invisible takedown of Peter** (Ep 3): proves himself without anyone seeing how. *Underdog-Proves, T2* +- **The cave / chosen-one origin** (Ep 4): an eight-year-old knocked off a cliff inherits a destiny he didn't ask for. *Discovery, T2* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the rigged status sort — orphan with no money, no name, no family, walks into a world of heirs and is mocked on sight by guards and the girl he's risking his life to protect. +- **T2 (supporting):** the exploitation cost — raised on near-fatal missions for pocket change; carries lethal skill and a destiny he can't disclose to anyone. +- **T3 (deepening):** the loneliness underneath — the thing he wants (a family's embrace) is the one thing his life of secret service can never give him. +- **Drift risk:** play Brian as a smug secretly-powerful badass dunking on rich kids and the injustice nerve dies (CTI collapse) — empathy is "looked-down-on outsider hiding who he is," not "OP hero enjoying the flex." + +--- + +# LAYER 2 — RAILS (eps ~20–93) + +## 2a · Conversion Threads +1. **Will the rich girl ever see who he really is?** — Stella's thaw from contempt ("crawled out of a basement," Ep 3) to "he actually cares" (~Ep 51); the secret-bodyguard cover means she's falling for a lie about him. Can be *initiated*, never delivered, in a promo. +2. **What is the pendant actually?** — answered ~Ep 51 (Eli Grayson reveals he's a mind stored by an ancestor; "Mystic Space"). The open question of a power Brian himself doesn't understand. Tease only. +3. **Can Brian break past level one?** — pays off ~Ep 53 (the Mystic Space's energy density forces the breakthrough he couldn't reach outside). The withheld ceiling; high-value tease. +4. **What danger is Stella actually in?** — Robert says she's "in a lot of danger" (Ep 2); the real threat sits behind the schoolyard nuisances. A genuine withheld-stakes thread — surface the question, never the answer. +5. **Who else from Brian's past is circling?** — Cody Marlow (cop), Mr. Lin's classified network, the assassins the pendant remembers. The warzone life bleeds into Aspen Hills mid-run. Tease. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Brian blow his cover for an easy win.** His whole value is being underestimated; a promo can't have him announce he's the bodyguard or flaunt his skill for status. +- **The show never makes Brian rich or high-status.** He's salaried by Robert and lives in a borrowed guest room; the money is a wage, not wealth. No flexing. +- **The pendant never does whatever the plot needs.** Its established functions are threat-sense, threat-memory, opportunity-hints, and (later) housing Eli + the Mystic Space. Don't fabricate new powers. +- **Cultivation never comes free or instant in the ordinary world.** Brian is stalled at level one precisely because the outside world lacks energy; breakthroughs require the cave/Mystic Space conditions. No casual power-ups. +- **Brian never wins by raw aggression or cruelty.** He de-escalates, deflects, and uses precision; he refuses to humiliate for sport. A "rage-stomps the bullies" beat misreads him. +- **The romance never resolves.** Stella's feelings build under a false premise (study buddy, not protector); the payoff lives in the app. + +--- + +# LAYER 3 → companion: `world_tbb_deep.md` · *on demand only (build when needed)* + +> Full cast (Stella Hart, Harper Adams, Peter Kingston, Luke Hartley, Robert Hart, Albert Bennett, Samuel Lin, Eli Grayson, Cody Marlow, Phantom), full pendant/Dragon-Mastery mechanics and level structure, the Dragon Cave / chosen-one lore, world geography (Chinatown, Aspen Hills, Maple Grove, Hart Towers, Starlight Peak), relationship map, and the proven-promo failure record. Pulled only on a canon question, a W2 break check, or a W5 deep dive. + +--- + +**Canon variant flag:** the source names the technique both **"Dragon Mastery Arts/Techniques"** (dominant; matches the locked pillar) and **"Dragon Slaying Technique"** (Ep 53). Use **Dragon Mastery** in all promo work; treat "Dragon Slaying" as a source inconsistency, not a separate system. + +**Cross-show contamination:** checked against the per-show pillar index (`three_pillars.md`). TBB shares a **Secret/Hidden Identity** pillar with **MVS, PE, TSS, SS, SW** and an **academy/elite-school + class-gap** setting with **WBT, FLBM, TS, SW** — keep TBB strictly distinct: its lead is **Brian Woods** (Chinatown orphan, *secret bodyguard* to a billionaire's daughter, **jade pendant** housing **Eli Grayson** + **Dragon Mastery** cultivation, undercover as a "study buddy"), NOT a student awakening a power *at* the school. TBB's school is a **cover**, not the arena where his power originates. Note "The Hawk" codename here vs. FLBM's literal Hawk (a beast) — unrelated; do not conflate. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tbb_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tbb_deep.md new file mode 100644 index 0000000..8e65cd6 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tbb_deep.md @@ -0,0 +1,96 @@ +# TBB — The Billionaire's Bodyguard — Layer 3 Deep Reference + +> Companion to `world_tbb.md`. On-demand only (canon question, W2 break check, W5 deep dive). Reference-formatted; not in the default build path. Source verified through ep ~93. +> **L3 note:** the working doc carries everything a cold-traffic promo needs; this file is the canon backstop, not a build input. + +--- + +## Cast — full + +| Character | Role | Entry | Anchor-safe? | Key detail (source) | +|-----------|------|-------|--------------|---------------------| +| **Brian Woods** | Protagonist | Ep 1 | Yes | Chinatown orphan raised since age 3 by Samuel Lin; battle-hardened operative (warzone rescues), trained in martial arts, assassination, and traditional medicine. Codenames **"The Hawk"** (from the pendant's threat-sense) and **"Arn"** (field codename, used by Cody). Carries the Mystic Jade Pendant + Dragon Mastery Arts; stuck at late level 1 until Ep 53. Undercover as Stella's "study buddy." | +| **Stella Hart** | Principal / slow-burn | Ep 3 | Yes | Robert's only daughter; Maple Grove honors student who works hard to prove she didn't coast on family status. Golden hair, designer watch, "a presence." Cold and dismissive of Brian on arrival ("crawled out of a basement"); thaws as she sees he genuinely cares (~Ep 51). Doesn't know he's her bodyguard. Owns the dog Phantom. | +| **Harper Adams** | Stella's best friend / comic foil | Ep 3 | Yes | Playful, teasing, meddling; ships Brian with Stella; needles Brian (leftovers gag, Ep 35). The reader's nudge toward the romance. | +| **Robert Hart** | Employer / billionaire | Ep 2 | Yes | Chairman of Hart Group; hired Brian (on his father Austin's advice) as Stella's **secret bodyguard** — $30k/mo, school + villa covered, cover = study buddy. Not entitled (family was poor until he was ~7–8). Knows Stella is "in a lot of danger"; withholds the mission's full nature even from Brian. | +| **Samuel Lin ("Mr. Lin")** | Mentor / father figure | Ep 1 | Yes | "Funny old man," aging martial-arts master who took Brian in at age 3; pays him a pittance for near-fatal missions. Secretly one of the **earliest members of a notorious international assassin organization**; trained Brian in combat, then sent him at age 6 to train two years under Samuel's *own* master. Relationship is father/son, not master/apprentice. Sets the "big mission" in motion. | +| **Eli Grayson** | Pendant spirit / cultivation mentor | ~Ep 51 | No — mid-run | Sardonic, vain old master whose mind an ancestor stored inside the Mystic Jade Pendant, "waiting for the right person." Lives in the pendant's **Mystic Space**; goads Brian into his first breakthrough (Ep 53). The Dragon Cave mechanism was set by *his* grandmaster. | +| **Albert Bennett** | Hart family butler | Ep 2 | Yes | "Almost family" to the Harts; Robert leaves him decision-making authority in his absence. Drives/escorts Brian, warns him Stella is "difficult," runs the villa logistics. | +| **Cody Marlow ("Hound")** | Veteran comrade → cop ally | ~Ep 25 | Situational | Fellow veteran who fought beside Brian (Sahara Desert ops); now a Metro City police **captain**. Idolizes Brian; recognizes him and tries to pin down his identity ("Arn"). Was injured tracking an international drug lord. Becomes Brian's law-side ally. | +| **Samantha Cassidy** | Detective / Cody's 2IC | ~Ep 9 | Situational | Metro City Detective Unit, Cody's second-in-command; runs cases when Cody's away (Capital Bank heist, the school gun incident). Flustered by Brian's smart mouth. | +| **Peter Kingston** | Campus antagonist | Ep 3 | Yes | Tall, model-handsome Maple Grove heir who harasses Stella; humiliated by Brian's invisible takedown (Ep 3) and a rooftop beatdown (Ep 8). Escalates via his father's muscle. | +| **Blake** | Criminal enforcer | ~Ep 13 | Situational | "Well-known figure in Aspen Hills' criminal circles," works for Peter's father; Brian beats him "within an inch of his life" → the police complication that reconnects Cody (Ep 25). | +| **Luke Hartley** | First friend / Maple Grove student | Ep 2 | Yes | Met on the train; charmed by Brian out-conning two scammers. Easygoing, admiring; doesn't know Brian lives at Stella's. | +| **The Girl in Black (assassin)** | Mysterious operative | ~Ep 39 | No — mid-run | Beautiful assassin (~18) wearing a ring bearing the insignia of Samuel Lin's old international assassin org. Brian rescues her when she's gravely wounded *because* of that emblem's tie to his lineage. A past-world thread bleeding into Aspen Hills. | +| **Austin Hart** | Family patriarch | ~Ep 39 (ref) | No | Robert's father; built Hart Group from construction-worker roots. Advised Robert to hire Brian. Still influential; old-friend shareholders (now their heirs) are the trouble. | +| **Michael Turner** | Maple Grove Academic Director | Ep 6 | Situational | Middle-aged administrator; stiffens around Brian. School-authority texture. | +| **Phantom** | Stella's guard dog | ~Ep 5 | Situational | Big, tough-looking dog; "downgraded" from leftover ribs to premium kibble once Brian started eating at the table (running gag). | +| **Dr. Dylan Kang** | Off-screen medicine figure | ~Ep 40 (ref) | No | "Legendary" traditional-medicine expert; maker of military-grade "Quick Heal Medicine." Establishes that Brian's own medicine-making rivals the best on the market. | +| **Pangolin** | Fallen comrade (ref) | ~Ep 27 (ref) | No | A soldier Brian and Cody both fought alongside; lost on a mission gone wrong. Animal-codename unit lore (Hawk / Hound / Pangolin). | + +--- + +## World mechanics — full + +**The Mystic Jade Pendant.** +- *Origin:* one of two artifacts (with the Dragon Mastery scroll) sealed in the Dragon Cave of Mystics; retrieved by an 8-year-old Brian as the prophesied "chosen one." +- *Threat-sense:* warns Brian of any nearby **ill intent** via a private pulse only he perceives; the closer/more hostile the intent, the sharper the signal. Saved him repeatedly in warzones (snipers, blades, poison). The source of the codename **"The Hawk."** +- *Threat-memory:* remembers anyone who has tried to harm Brian before and warns harder when they reappear. +- *Opportunity-hints:* a distinct class of signal points toward hidden value/relics. Brian has decoded **three** distinct alerts so far; occasional unfamiliar signals he can't yet interpret. +- *Exclusivity:* the effects are Brian's alone — no one nearby notices anything. +- *Mystic Space:* the pendant's interior dimension, brimming with dense energy; houses Eli Grayson's stored mind. Entered by sleeping (Ep 51). Its energy density is what finally allows cultivation breakthroughs the ordinary world can't. + +**Dragon Mastery Arts** *(canon variant: also "Dragon Mastery Techniques"; once called "Dragon Slaying Technique," Ep 53 — treat as a source slip, not a separate art).* +- A leveled martial-cultivation system from the scroll in the Dragon Cave; "a martial art so powerful, only legends could wield it." +- Each level reinforces body, reflexes, and energy channels — Brian at level 1 is already "an elite" vs. ordinary fighters. +- *The stall:* breakthroughs require high ambient energy. Brian was stuck at the **late first level** for years because the outside world is too energy-poor; the Mystic Space (Ep 53) gives the surge that pushes him through. +- Training substitutes for sleep — a night of meditation/training restores him like ten hours' rest. + +**The Dragon Cave of Mystics.** +- On **Starlight Peak**; reveals itself **only on a full-moon night, only to "the chosen one"** (prophecy carved in fire-lit letters). +- Set up by Eli Grayson's grandmaster. Interior: gold/silver veins, an altar holding a wooden box (scroll + pendant). +- **Escape-before-sunrise rule:** leave before dawn or be trapped inside for **five years** (the "five-year milestone" Brian references). Brian, age 8, escaped at the last second after Samuel Lin knocked him off a cliff to trigger the discovery. + +**Brian's skill set (non-magical).** +- Elite hand-to-hand and weapons; trained by Samuel Lin and, at 6–8, by Samuel's unnamed master (Brian grasped ~30% of that master's techniques — already enough to dominate missions). +- **Assassination craft:** stealth, ambush, presence-suppression, sensing other operatives ("people in this line of work can sense each other"). +- **Traditional medicine:** brews healing ointments and remedies rivaling military-grade product; reads pulses to diagnose. Inherited from Lin. +- **Con/grift instincts:** out-cons two professional scammers on the train (Ep 2). + +**The world.** +- **Chinatown** (Brian's home — patched walls, flickering bulb, cold); **Aspen Hills** ("where all the rich people live") containing **Maple Grove Academy** and **Hart Villa**; **Hart Towers** (Hart Group HQ); **Starlight Peak** (the cave); **North Sahara** (Ep 1 warzone); **Metro City** (Cody's police jurisdiction). +- **Maple Grove Academy:** elite prep school, crisp uniforms, heirs, statewide college-entrance-exam pressure; cherry-blossom courtyard; visible designer-status culture. +- **Hart Group:** construction-rooted empire built by Austin Hart; board of shareholders descended from Austin's old partners — some now scheming against Robert. + +**The mission (withheld spine).** Robert hires Brian publicly as a study buddy, secretly as a bodyguard, and tells him the *real* priority is to "build a good relationship with Stella." The danger is corporate: rival shareholders/an inside Hart Group executive engineered Stella's bank kidnapping to leverage Robert into a deal (Ep 39). Brian suspects Stella may be **bait** for a larger hidden threat; Robert withholds specifics "for security reasons." + +--- + +## Relationship map (ep ~93) +- **Brian ↔ Stella:** employer's-daughter / secret-protector; her contempt thaws into feelings built on a false premise (she thinks he's a study buddy). Slow-burn; unresolved. +- **Brian ↔ Harper:** sparring banter; she's the matchmaker pushing Stella toward him. +- **Brian ↔ Samuel Lin:** father/son under a master/apprentice surface; Lin engineered both the cave (age 8) and the Hart mission; gruff affection, withheld answers. +- **Brian ↔ Eli Grayson:** reluctant pupil / vain mentor inside the pendant; Eli manipulates Brian into breakthroughs and doles out lore on his own terms. +- **Brian ↔ Robert:** asset/employer with growing mutual respect; Robert impressed by Brian's sharpness (Ep 39). +- **Brian ↔ Cody ("Hound"):** war brothers; Cody idolizes Brian; now cop-vs-mysterious-civilian on the surface, allies underneath. Shared grief over Pangolin. +- **Brian ↔ the Girl in Black:** strangers bound by his mentor's old organization; a debt-of-lineage rescue. +- **Stella ↔ Harper:** best friends and study partners; Harper reads Stella's feelings before Stella admits them. +- **Robert ↔ Austin Hart:** deferential son / influential patriarch; Austin's old partners' heirs are the antagonist bloc. + +--- + +## Proven-promo failure record +None yet — TBB has no shipped-promo data logged at world-doc creation. Populate this section as promos ship (CPI / CTI + the structural lesson), following the FLBM/`performance_benchmarks.md` pattern. Until then, treat the HARD BLOCKS in `world_tbb.md` as the primary fidelity guardrails. + +--- + +## Cross-show contamination guard +TBB shares a **Secret/Hidden Identity** pillar (MVS, PE, TSS, SS, SW) and an **elite-school + class-gap** setting (WBT, FLBM, TS, SW). Keep distinct: +- TBB = **Brian Woods**, Chinatown orphan and battle-hardened operative, **undercover as a billionaire's daughter's "study buddy" while secretly her bodyguard**; powers are a **jade pendant** (threat-sense, houses **Eli Grayson**) + **Dragon Mastery** cultivation, both earned as a child in the Dragon Cave. The school is a **cover/arena for a hidden corporate threat**, not where his power originates, and he enters **already trained but stalled at level 1**. +- Do NOT frame TBB as a student *awakening* a power at school (that's SW/MVS/FLBM). Do NOT make Brian secretly rich or status-flexing. Do NOT conflate **"The Hawk"** (Brian's codename, from the pendant) with **FLBM's Hawk** (a literal bonded beast) — unrelated. + +## Source notes / flags logged +1. **Technique name inconsistency:** "Dragon Mastery Arts/Techniques" (dominant, matches the locked pillar) vs. "Dragon Slaying Technique" (Ep 53). Standardize on **Dragon Mastery**. +2. **Mission ambiguity is canonical, not a gap:** the source deliberately withholds the full mission ("build a relationship with Stella"; she may be bait). Don't invent a concrete villain plan beyond the Hart Group shareholder/kidnapping scheme (Ep 39) when building promos — the withheld stakes are a feature. +3. **Codename ledger:** Brian = "The Hawk" (pendant) and "Arn" (field); Cody = "Hound"; Pangolin = fallen comrade. Animal-codename unit lore — keep consistent if referenced. +4. **Source coverage:** L0/L1 verbatim-traced through Ep 5 plus the pendant/cultivation reveals (Ep 35, 51–53) and the assassin/Cody threads (Ep 39–41, 25–27); eps 6–93 sampled. Extend verification before anchoring any post-Ep-20 beat. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tmt.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tmt.md new file mode 100644 index 0000000..a425f9a --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tmt.md @@ -0,0 +1,125 @@ +# TMT — The Mech Touch — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_tmt_deep.md`. +> Status: DRAFT (source-built) · Confidence: High (Eps 1–20 read verbatim from primary source; Eps 20–100 sampled). — built from `source docs/extracted/TMT.txt`, not from the prior world doc. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and at the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion and loads on demand only. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +> Canonical list: `three_pillars.md`. The pillar tagged **(Thruline)** is the Relatable Thruline source (W2). + +1. **Mech Industry Ladder (poor → rich)** — the genetic dud at the bottom, building up by hand. +2. **Missing Father / Impossible Debt** *(Thruline)* — "left holding someone else's mess." +3. **Hidden System (Mech Designer System)** — the secret tool that must never be exposed. + +## Protagonist — Ves Larkinson +**Identity.** Last son of a multi-generation Mech Corps pilot dynasty, tested at ten and told he's one of the 96.5% who can never pilot — the genes "skipped him." He opens a one-man mech shop; his father then vanishes, leaving 330M of forged debt and a secret System. Not chosen, not gifted (Creativity 0.3, "good-for-nothing loser"). Engine: **Underdog Awakening** — worst possible start for the craft he loves. +**Combat.** Never pilots, never fights. Designs, fabricates, out-thinks. Physically feeble (Strength 0.6). Wins through systems, loopholes, and the gem cat — never force. +**Power Source.** The **Mech Designer System** — a secret chip from his missing father; self-destructs on install. It does NOT design for him: he builds a viable mech himself, then spends **Design Points (DP)** to fabricate it. DP come slowly from his own original designs (3.89/day at start), feast-or-famine, never convertible to credits. It can fabricate impossible objects (a real gem cat) via [REDACTED] tech "a thousand years beyond humanity's grasp." Cannot be measured, copied, or exposed — that gets him killed or robbed. +**Voice.** Sarcastic-under-duress runt narrating himself through impossible odds. Bickers with the System like a sibling. Names his own failures out loud. Pragmatist behind gallows humor — never the confident hero. + +**Voice Samples (verbatim — never paraphrase):** +1. "I'm an idiot. This has to be a joke, or, worse, a scam." (Ep 3) — System skepticism +2. "Hey, who are you calling a loser? … I've had five years of schooling in mech design and all I am is a novice?" (Ep 3) — defensive-wounded +3. "So I put the poop gems into the mechs? Maybe I can sell these poop gems for some extra credits and stave off the debt collectors." (Ep 4) — gallows pragmatism +4. "I'm broke. I can't even scrounge up the credits to buy the raw materials I need to fabricate new parts. How am I supposed to make the things I need to sell to make the money I need to pay off the debt I have so I could start the business?" (Ep 2) — spiral of impossibility +5. "What did you do, Dad?" (Ep 2) — the wound under the sarcasm + +**Drift tripwires.** Hero-confident voice | pilots a mech | dismisses the debt | wins on inheritance/family pull | System becomes public | genetic-potentate redemption | cheerful optimist register. + +## Setting — Entry-Window World +**Feel.** A salvaged-shipping-container workshop on **Cloud Curtain**, a sleepy residential backwater (good schools, colorful clouds, no industry) in the third-rate **Bright Republic**. Cramped, rusty, secondhand-but-working. The wrist communicator is the interface to all of life — credits, identity, location, visible. Society splits on the 3.5%/96.5% genetic line: potentates are conscripted elites, everyone else last-class. Mech design takes capital, MTA licenses, and connections Ves lacks. + +**Sensory Samples (verbatim):** +1. "It was a small, modular, prefabricated structure that looked like a salvaged shipping container off a decommissioned cargo ship. He glanced at the rust and rough patches that covered its steel shell." (Ep 1) +2. "Ves heard a thump. And, there, on the floor, was the cat. In real life. Not a projection." (Ep 3) +3. "A measly twelve-hundred credits, which was barely enough to cover his protein packs and veggie tubes." (Ep 2) + +**Drift tripwires.** Cloud Curtain as glamorous industrial hub | adult mentors who solve his problems | debt forgiven early | norms and potentates as equals | spacious, well-kept workshop. + +## Tone Constraint +Wry survival comedy over a real ache — the jokes are armor over poverty, grief, and dread. If a promo plays Ves as a triumphant prodigy instead of a cornered underdog, the tone has slipped. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +Cold open: Ves's father, Lt. **Ryncol Larkinson**, pilots a war mech into a dark cave on a retrieval mission; something massive claws through its armor, the comms die on "Lieutenant… get ou—," and he's gone. Cut to Ves unlocking his brand-new workshop alone — proud, broke, waiting for a father who never arrives. + +## First 5 episodes *(the first sitting)* +Father confirmed missing (Ep 2). A bank cold-calls: **330M credits** of forged-signature debt in Ves's name at a **28% annual rate**, with a **5-million-credit payment due in 90 days** (Ep 2). The father's secure chip boots the **Mech Designer System**, which shocks Ves unconscious (Ep 2). Ep 3 attribute readout (verbatim): Strength 0.6, Dexterity 0.7, Endurance 0.6, Intelligence 1.2, **Creativity 0.3**, **Concentration 0.9**, Neural Aptitude F; Evaluation "Good-for-nothing loser." System grants 10 DP, a failed lottery, and a Gold-ranked **gem cat (Lucky)** who excretes gems (Ep 4). Too broke to build a real mech, Ves starts designing virtual ones in the game **Iron Spirit** (Eps 4–5). + +## First 20 episodes *(texture band)* +Ves grinds the Iron Spirit marketplace, building Fantasia variants (the Seraphim, a hit) toward each payment. Cousin **Melinda** (Diamond-rank, Bentheim Planetary Guard) urges him to quit (Ep 10). Grandfather **Benjamin** and uncle **Ark** watch from afar, shore up the bank, but refuse to bail him out (Ep 17). Escalating System tutorial missions build to the riddle of the **X-Factor** — the unmeasurable "life" a design may carry (Eps 17–20). + +## HARD BLOCKS *(opening-binding)* +1. **Ves is NOT a potentate — he will never pilot a mech.** Genetic, permanent; the premise rests on this. +2. **The Mech Designer System is absolutely secret.** Exposure = death or robbery ("Ves might even lose his life," Ep 10). No character may learn it exists. +3. **Ryncol is missing, NOT confirmed dead.** No body, no court declaration. Do not resolve his disappearance or motive. +4. **The debt is not eliminated.** 330M total; the crisis is making each installment, never clearing it. Do not have it forgiven. +5. **The System does not design FOR Ves.** He builds the mech himself; it only fabricates, for DP. Not an auto-win button. +6. **DP cannot convert to credits.** Money problem and DP problem are separate, both real. +7. **Lucky is a System-made gem cat, not a pet.** Mechanical; excretes gems (1/week at Lv1). Not biological, not ordinary. +8. **The X-Factor cannot be measured.** Ves's evolving theory, dismissed as myth by experts. Not proven science. + +## Entry map *(tease ok, anchor flags)* +- **Iron Spirit (virtual mechs)** — enters ~ep 4 (can't afford real mechs yet). *Anchor-safe.* +- **Gem cat / Lucky** — enters ~ep 3–4 (welcome package). *Anchor-safe.* +- **X-Factor mechanic** — enters ~ep 17 (Tutorial Part 4). *Tease, don't anchor a first-sitting promo on it.* +- **Bentheim / competitions** — Ves travels to Bentheim ~ep 31; the **Leemar** Open Competition is the late arena (~ep 76+). *Tease only.* +- **Grandfather Benjamin / uncle Ark** — on-page ~ep 17 (offstage family). *Tease.* +- **First real fabricated mech** — Ves cannot build a real mech in the first sitting; it comes well after the Iron Spirit grind. *Anchor flag.* + +## Engines the opening supports +1. **Underdog Awakening (UNTESTED on IP):** worst start for a designer — third-rate degree, no money, no connections, genetic bar to the craft. Core engine. +2. **Secret Power (UNTESTED):** the System is the hidden advantage that must stay hidden — dramatic irony in every scene. +3. **Bond / Family Loyalty (UNTESTED):** missing father, forged debt, a pilot dynasty he can't join. The emotional spine. +4. **Craftsman's Pride / Builder Fantasy (UNTESTED):** the tactile thrill of building something real from nothing. + +## IM sources — opening window +- **Forged debt reveal** (Ep 2): father saddles him with 330M and vanishes. *Betrayal, T1* +- **90-day / 5M payment** (Ep 2): impossible clock on a man with 1,200 credits. *Pressure, T1* +- **"Not a potentate"** (Ep 1): tested at ten, told he's nothing, during a surprise party. *Injustice, T2* +- **"Good-for-nothing loser"** (Ep 3): the System kicks him while down. *Humiliation, T2* +- **Family won't bail him out** (Ep 17): grandfather can, won't. *Injustice, T3* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** the father's forged 330M debt + the 90-day clock — Ves is punished for someone else's crime. +- **T2 (supporting):** the genetic verdict at ten — born into a pilot dynasty, locked out by birth; the System's contempt. +- **T3 (deepening):** a wealthy family that watches him drown and chooses not to help. +- **Drift risk:** if a promo plays the System as a fun gadget and skips the debt/abandonment, it loses the empathy nerve and collapses CTI. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **What happened to Ryncol?** — unresolved through ch 100 (no body; trail leads to a conflict zone, Ep 17). The show's master mystery; tease the absence, never the answer. +2. **Can Ves make the next payment?** — recurring through ch 100; the debt is managed, never cleared. The renewable ticking clock. +3. **The X-Factor** — pays off slowly across the run as Ves learns to put "life" into mechs; never fully explained. Sells as a mystique hook, not a delivered system. +4. **Will the System be discovered?** — exposure threat persists; the secret-power tension. Tease near-misses, never the reveal. +5. **The competition climb (Bentheim → Leemar)** — Ves rises from virtual-mech nobody toward master-designer apprenticeship (~ep 99). Tease the underdog tournament arc; don't anchor a first-sitting promo there. + +## 2b · Canon Limits / Never-Happens +- **Ves never pilots a mech.** (Promoted to HARD BLOCK #1.) +- **The System never designs the mech for him.** (Promoted to HARD BLOCK #5.) +- **The debt is never paid off / forgiven** within the source window — only individual installments are survived. +- **The X-Factor is never measured or proven** as instrumented science; it stays Ves's contested theory. +- **No power-up replaces the work** — every advance is a built, sold, hand-made design, not a destiny moment or inheritance. +- **The System is never exposed** to another character; its existence is never made public. + +--- + +# LAYER 3 → companion: `world_tmt_deep.md` · *on demand only* + +> Full cast, world mechanics, ability sets, geography/economy, flavor. Pulled only on a canon question, a W2 break-check, or a W5 deep dive. + +--- + +**Cross-show contamination:** checked against `series_worlds.md` index — clean (no shared names/mechanics with other active series). diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tmt_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tmt_deep.md new file mode 100644 index 0000000..59f7efb --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tmt_deep.md @@ -0,0 +1,89 @@ +# TMT — The Mech Touch — Layer 3 Deep Reference (companion to `world_tmt.md`) + +> **L3 note:** On-demand only. Reference-formatted (tables/bullets), not prose. Source: `source docs/extracted/TMT.txt` (Eps 1–20 read verbatim; Eps 20–100 sampled). Anything outside the read/sampled window is flagged UNVERIFIED. + +--- + +## Cast (entry window + early sampled) + +| Character | Role | Entry | Notes | +|-----------|------|-------|-------| +| **Ves Larkinson** | Protagonist; Novice Mech Designer | Ep 1 | Non-potentate (96.5%). Rittersberg degree. Owns workshop + System + Lucky. | +| **Ryncol Larkinson** | Ves's father; veteran Mech Corps pilot (Lieutenant) | Ep 1 | Disappears in cave retrieval mission, Ep 1. Forged 330M debt in Ves's name. Left the System chip. MISSING, not confirmed dead. | +| **Lucky** | Gold-ranked gem cat (System welcome package) | Ep 3–4 | Mechanical, not biological. Skill [Gem Excretion I] — 1 gem/week at Lv1; gems give random bonuses in mech designs. Hisses, then purrs. | +| **The Mech Designer System** | Secret design/fabrication tool | Ep 2 | Ethereal voice; sardonic; menus: Status / Designer / Missions / Skill Tree / Shop / Lottery / Inventory. Tech "1,000+ years beyond humanity" (Ep 15). | +| **Melinda Larkinson** | Ves's cousin; Diamond-rank pilot, Bentheim Planetary Guard | Ep 10 | Warm, loyal; urges Ves to quit and take a Mech Corps technician path. One of few family who stayed close. | +| **Benjamin Larkinson** | Ves's grandfather; family patriarch (7 children) | Ep 17 | Lives in Rittersberg. Refuses to bail Ves out but leans on the bank to block dirty tricks. Investigating Ryncol's disappearance. | +| **Ark Larkinson** | Ves's uncle (Ryncol's brother); officer | Ep 17 | Reports to Benjamin; tracks Ves's Iron Spirit progress, buys his variants anonymously to give a quiet push. | +| Iron Spirit players (Triceratopssss, TheSeventhSnake, CassieTheFox, Shifter66, etc.) | In-game rivals/buyers | Eps 5+ | Online mech-game community; Ves designs under a maker account. | + +> UNVERIFIED in read/sampled window: **Marcella** (broker / 20% commission / 10-yr exclusive contract), the **Whalers**, **mysterious-alloy → energy-claws** Lucky combat upgrade, Lucky reaching higher combat rank. These appear in the prior world doc but were NOT located in Eps 1–20 (read) or the sampled later chapters. Treat as later-arc or re-source before use. + +## The Mech Designer System — mechanics + +- **Core loop:** Ves must design a *viable* mech himself → pay **Design Points (DP)** to fabricate it. The System evaluates/fabricates; it does NOT design. +- **DP earning:** estimated 3.89 DP/day at start (Ep 3); earned from his own original designs only — copying others' designs earns 0 DP (Ep 15). An average mech costs ~1.44 billion DP to fabricate accurately (Ep 3) — establishing the scale of the climb. +- **DP ≠ credits:** cannot convert. Separate economy. +- **Fabrication of impossible objects:** uses [REDACTED] tech to instantiate real items (Lucky) from DP (Ep 4). +- **Welcome package (Ep 3–4):** 10 DP, 3 copper lottery tickets (all lost), 1 Gold-ranked gem cat. +- **Locked at Novice rank:** Missions/Shop/Lottery gated until rank-up. +- **Tone:** the System insults Ves ("good-for-nothing loser," "An all-rounder in incompetence") while claiming neutrality. + +## Attribute readout (Ep 3, verbatim — CANONICAL) + +| Attribute | Value | +|-----------|-------| +| Strength | 0.6 | +| Dexterity | 0.7 | +| Endurance | 0.6 | +| Intelligence | 1.2 | +| **Creativity** | **0.3** | +| **Concentration** | **0.9** | +| Neural Aptitude | F | + +Starting Skills (Ep 3): Assembly Novice · Business Apprentice · Computer Science Incompetent · Mathematics Incompetent · Mechanics Apprentice · Metallurgy Apprentice · Physics Novice. Evaluation: "Good-for-nothing loser." +*(By Ep 17, Creativity and Concentration each rise to 1.0 as Ves invests DP — the 0.3 / 0.9 figures are the Ep-3 starting readout.)* + +## Debt framing (Ep 2, verbatim — CANONICAL) + +- **330 million Bright Credits** total, borrowed under Ves's forged signature (Ryncol's hand). +- **Adjusted annual rate: 28%.** +- **A payment of 5 million credits is due 90 days from the call** — i.e., the 5M is a 90-day installment, NOT an annual interest figure. +- Ves's bank balance at the time: ~1,200 credits. +- Life-insurance dead end: no payout without a death certificate; "presumed dead" needs 6 years of no contact (Ep 2). + +## World / setting mechanics + +- **The genetic divide:** only **3.5%** of humans ("potentates") can survive the mech neural interface; the other **96.5%** ("norms") cannot — a failed interface fries the brain. Tested at age 10 by DNA/blood. Potentates are conscripted into the Mech Corps. (Ep 1) +- **Mechs:** ~50-ft bipedal war machines; displaced most conventional military. ~400 years since the first mechs (Ep 18). Designers can be as famous as pilots. +- **Mech design economics:** requires capital, hundreds of licensed patents, MTA (Mech Trade Association) certification, and government manufacturing permits. Tiered designer class: superstar contractors → veteran middle class → bottom-rung repair/maintenance wanna-bes (where Ves starts). (Ep 1) +- **Iron Spirit:** ultra-realistic online mech game (BSBH Corp); mechs must be fabricated within its sim; designs sell for in-game gold or real credits. Ves enters here because he can't afford real mechs. Registration 800 cr; virtual licenses 10k–100k cr. (Eps 4–5) +- **The X-Factor:** disputed notion that mechs carry a "life"/emotional resonance that lets a pilot exceed peak performance. Unmeasurable; dismissed by scientists, attested by veteran pilots. Ves's evolving theory ties it to emotion bled into design. (Eps 17–20) + +## Geography + +| Place | What it is | +|-------|-----------| +| **Cloud Curtain** | Ves's home planet — quiet residential backwater ("great schools," colorful clouds), low tax/regulation; workshop is near **Freslin**. (Source spelling: "Cloud Curtain"; first mention "Cloudy Curtain," Ep 4.) | +| **Bright Republic** | Third-rate ~100-planet state. Borders the belligerent **Vesia Kingdom** (skirmishes). | +| **Bentheim** | Economic port heart of the Republic; FTL hub; Melinda's posting; competition travel ~ep 31. | +| **Rittersberg** | Founding planet / seat of government; distinguished families; Benjamin's home; Ves's third-rate alma mater (Rittersberg University of Technology / "Rittersberg College"). | +| **Leemar** | Late-arc competition venue (Carnegie Group / Leemar Open Competition, ~ep 76–99). | + +## Relationship map (entry window) + +- **Ves ↔ Ryncol:** love + abandonment + betrayal (forged debt). The wound under everything. +- **Ves ↔ the System:** sibling-bicker dynamic; reliance + resentment. +- **Ves ↔ Lucky:** lonely-guy-and-his-weird-cat warmth. +- **Ves ↔ Melinda:** the cousin who never wrote him off (vs. a family that mostly distanced from the non-potentate). +- **Ves ↔ Benjamin/Ark:** watched and quietly aided from a distance, but deliberately not rescued (tough love / "see Ryncol's plans through"). + +## Flavor notes + +- Color-coded production script (SFX in blue caps, narration cues, dialogue directions) — source artifact, not story content. +- Running gag: Ves bowing to / cursing the System depending on whether a mission just arrived. +- Recurring motif: the Mech Corps recruiting pamphlet + the framed photo of Ryncol triumphant in his mech's palm — the dream Ves was locked out of. +- Larkinson family creed (Ryncol): "Find your passion, and then you'll find your destiny." (Ep 1) + +## Mech models seen (entry window) +Fantasia 2R / 2R-E and variants (Seraphim — aerial marksman, Phantasm, Nomad), Matador mk7 (Ryncol's, Ep 1), Caesar Augustus CA-1 (and Ves's CA-1A "Nero"), the Juggernaut (anti-spaceship class), later Sword Dancer / Executioner (Leemar finals). Reference only. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ts.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ts.md new file mode 100644 index 0000000..5035784 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ts.md @@ -0,0 +1,125 @@ +# TS — Trillionaire Sterling — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps (ch) / first 20 eps (ch). **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_ts_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 built from verbatim ch 1–20; ch 20–100 sampled for entry map, threads, and limits. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and at the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion and loads on demand only. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +> Canonical list: `three_pillars.md`. Pillar tagged **(Thruline)** sources the Relatable Thruline (W2). + +1. **Hidden Legacy / Inheritance** *(Thruline)* +2. **Aurion / Supernatural Abilities** +3. **Class warfare in an elite setting** + +## Protagonist — Jed (Jedidiah) Sterling +**Identity.** Broke scholarship kid at Stonevale — pizza boy, cleaner, laundry guy, tutor, errand boy at once (Ch 2). Orphan, told his parents died in a "car accident"; refuses his rich best friend Damian's money every time. His girlfriend Jenifer betrays him with Chris Jones, the bully who has him beaten and dumped in a trash bin to die (Ch 3–4). A locket he could never open snaps open as he dies; the Golden Deity Aurion enters him and names him the Light Bearer, heir to the Sterling Dynasty (Ch 4–5). Engine: **hidden-heir-underdog** — wealth is a trillion, *status stays zero*, hiding it is the game. +**Combat.** Bare hands only. Supernatural speed (the world "syrups," afterimages, outruns leaping dogs), instinctive strikes, two-finger knockouts, kills with throat-slash and spear-hand. Powers arrived fully formed through the bond — not trained. Wins by speed, not technique. +**Power Source.** The Sterling locket — direct-bloodline heirloom, opens only to Sterling blood, never budged his whole life. Activated when his blood touched it as he died (Ch 4): a golden eagle (Aurion) emerged, dissolved into sparks, and entered him; injuries vanished. Grants strength, speed, instant healing, enhanced senses (night vision, hearing across blocks), instinctive medical/herbal knowledge, cognitive enhancement. **Not** a leveling system, mentor-taught, gradual, or an external weapon post-activation. Only the Light Bearer — one per generation, direct line — can perceive Aurion fully without dying. +**Voice.** Self-deprecating under pressure; names his own absurdity while covered in garbage. Protective to a fault. Quiet defiance, not loud revenge. Moral friction about the killing power ("What am I becoming?"). Names his poverty without shame; white-lies to friends. + +**Voice Samples (verbatim):** +1. "I'd rather work than feel like a burden." (Ch 1) — pride-as-identity +2. "Crazy locket. You wait till I'm about to die before you do anything." (Ch 4) — dark humor under duress +3. "All good! Just performing an unscheduled structural analysis of municipal waste receptacles. Grade A performance." (Ch 6) — humor-as-deflection +4. "Good question. Still working on the answer." (Ch 6) — wry, to "What are you?!" +5. "I'm just a nobody," he muttered. "A delivery boy with no parents, no future, no—" (Ch 5) — identity wound, raw + +**Drift tripwires.** Cocky-rich-guy voice | fights with trained technique or weapons | power awakens gradually through study | publicly operates as a Sterling | relishes violence | treats wealth as normal | treats friends as subordinates. + +## Setting — Entry-Window World +**Feel.** Jed orbits the pizza shop (neon sign, grease, mildew backroom), the scholarship dorm, and the wealth spaces he doesn't belong in — the Blueprint Hotel, the Crystal Hollow, Stonevale General. The texture is contrast: cracked shoes on marble, a pizza bag in a VIP suite, a trillion-dollar card in faded jeans. Wealth is the visible hierarchy — clothes, name, car decide how staff and classmates treat you. The Sterling name flips it instantly (sneers turn to bows), but Jed can't use it without exposing himself to the families that murdered his father. + +**Sensory Samples (verbatim):** +1. "Rain-slicked streets glistened under the streetlights, and the scent of old grease drifted from the half-cracked kitchen window." (Ch 1) +2. "The backroom always smelled faintly of garlic and mildew. A beat-up radio crackled above the lockers, playing '80s rock hits no one liked but everyone tolerated." (Ch 1) +3. "Water cascaded down textured crystal panels embedded in the walls, catching the ambient light and scattering miniature rainbows across the manicured entrance." (Ch 10 — Crystal Hollow) + +**Drift tripwires.** Fantasy/medieval setting | magic academy or cultivation sect | Jed comfortable in wealth spaces | poverty played for comedy over dignity | no class-contrast tension in the frame. + +## Tone Constraint +A power fantasy with heart: the wealth-contrast injustice carries the empathy, Jed's humor under duress is the counterweight. Slip the humor and it's just suffering; drop the injustice and the trillion is a hollow flex. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +Jed, drained from a delivery shift, learns from Damian that Jenifer — who claimed she was sick — is at the party. The lie lands. Establishes the scholarship-kid-in-a-kingdom-of-heirs world, the cracked-shoes-on-marble wound, and the central injustice before any supernatural beat. + +## First 5 episodes (ch 1–5) *(the first sitting)* +The inciting spine: Jed delivers pizza to the very room where Jenifer is with Chris (Ch 3); Chris reveals the betrayal was always a trap; Jed is beaten and dumped in trash to die (Ch 4); the locket activates and Aurion enters, heals, and names him heir of the Sterling bloodline (Ch 4–5). Powers, locket, and deity all established by the first sitting's end. + +## First 20 episodes (ch 1–20) *(texture band)* +Jed saves Ella from dogs/thugs (Ch 6) and heals her mother Mrs. Diaz with instinctive herbal knowledge (Ch 7). Sylvia Sterling (custodian) phones him (Ch 8), then bows publicly at the Crystal Hollow (Ch 11–12). She reveals his father was the last Light Bearer whose sacrifice was never to see his children (Ch 13), was **murdered** by rival deity families, and that Jed has scattered unknown siblings (Ch 13–14). The trillion-dollar card (Ch 15); the one-of-one obsidian phone (Ch 17). Jed kills Martin Garcia rescuing Ella/Mrs. Diaz (Ch 18); Mrs. Diaz falls into a coma (Ch 19–20). Dr. Armitage spots his father's birthmark; Sandra reveals Jenifer used Jed as her "grade-booster" (Ch 20). + +## HARD BLOCKS *(opening-binding)* +1. **Jed's Sterling identity is SECRET** — his father's murderers think the line is extinct (his only protection). Never operating publicly as a Sterling. +2. **Jed's powers are SECRET from the people he loves** — he later knocks his friends out to keep it. No casual displays before witnesses he cares about. +3. **The trillion-dollar card is "a tiny fraction" of Sterling wealth (Ch 15), but spending openly risks exposure.** Don't buy through problems in the open. +4. **Lord Arthur Sterling could NEVER see his children — deity-imposed sacrifice, not abandonment (Ch 13).** Never portray him as choosing to leave. +5. **Jed's father was MURDERED by a coalition of rival deity families who believe the line is dead (Ch 13–14).** Don't resolve or expose it. +6. **Aurion took eagle form and SPOKE — unprecedented; only Alexander the First had direct communication (Ch 13).** Don't diminish this. +7. **A SACRIFICE is owed by the next full moon (~4 weeks); its nature is UNRESOLVED through ch 100.** Don't invent or resolve it. +8. **Martin Garcia is DEAD (Ch 18); Mrs. Diaz is in a COMA, not dead (Ch 19–20).** Don't reverse either. +9. **Chris Jones is a MORTAL bully — not deity-connected.** Don't elevate him to a supernatural threat. + +## Entry map *(tease ok, anchor flags)* +- **Sylvia Sterling / the wealth reveal** — ~ch 8–12. *Anchorable as payoff, not as opening premise.* +- **King's Landing penthouse ($100M)** — Jed buys it ~ch 33–34; shelters Ella/Mrs. Diaz. +- **Ruben Garcia ("El Lobo")** — former warlord, Martin's brother; hunts Jed from ~ch 49; bomb/hostage siege. *Late — flag if a promo starts here.* +- **Rival deity families act directly** — Brown/Stone/Harbour send enhanced operatives (Kaelan, Seraphina) ~ch 66–91. *Destination, not entry.* +- **The Eighth Deity** — revealed ~ch 74 (hidden, exterminated eighth power). *Do not anchor.* + +## Engines the opening supports +1. **Hidden Heir / Secret Identity (UNTESTED, strongest):** orphan pizza boy secretly the most powerful heir alive — wealth he can't use, a name he can't speak. +2. **Underdog Awakening (UNTESTED):** grease-stained clothes in marble halls; mocked, then quietly untouchable. +3. **Injustice Engine (UNTESTED):** Chris's betrayal + beating + trash-dump; wealth-based contempt from every authority figure. +4. **Protective Bond / Found Family (UNTESTED):** Ella and Mrs. Diaz as adopted family; friends worth more than the trillion. + +## IM sources — opening window +- **Jenifer caught with Chris** (Ch 3): she looks up with "mild surprise." *Betrayal, T1* +- **"You existed. That was enough."** (Ch 3): the cruelty was the point. *Injustice, T1* +- **Beaten, dumped in trash** (Ch 4): "worthless and forgotten." *Injustice, T1* +- **Locket activates while dying** (Ch 4–5): "Silly boy. You are not dead." *Discovery, T1* +- **Sylvia bows at the Crystal Hollow** (Ch 11–12): heiress + six guards bow to the pizza boy. *Status Inversion, T1* +- **"One trillion dollars" / "a tiny fraction"** (Ch 15). *Status Inversion, T1* +- **Warehouse slaughter** (Ch 18) → "What am I becoming?" *Status Inversion, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** Jed is exploited, betrayed, beaten, and discarded for being poor — by people who pay no price. +- **T2 (supporting):** the wealth he secretly owns is invisible; everyone judges and humiliates the richest person in the room. +- **T3 (deepening):** the cosmic theft — a father murdered, a sacrifice that stole his childhood, siblings he's forbidden to find. +- **Drift risk:** leading with the trillion-dollar flex before the injustice is felt — the wealth only satisfies because the contempt earned it. + +--- + +# LAYER 2 — RAILS (ch ~20–100) + +## 2a · Conversion Threads +1. **Jed's unknown sacrifice, due by the next full moon** — unresolved through ch 100. The clock over the whole story; the cost of his power, deliberately withheld. +2. **The scattered Sterling siblings** — confirmed to exist (Ch 13–14), forbidden to find "for now." A reunion the audience aches for; never delivered in-window. +3. **Who murdered his father, and the coming reckoning** — six rival deity families; their direct operatives (Brown/Stone/Harbour) close in from ~ch 66+. Pays off as the macro-war, seeded as cold-traffic intrigue. +4. **Mrs. Diaz's coma** — the emotional cost of Jed's intervention; an open wound that keeps the trillion grounded. +5. **Will Chris/Ruben ever learn what Jed is** — Chris saw Sylvia bow and can't explain it; Ruben hunts a man he thinks is "a fucking delivery boy." Dramatic-irony loop. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Jed solve a problem by openly spending or flaunting Sterling money.** Each use of the card risks exposure; the constraint is the point. +- **The show never gives Jed a leveling/stat system or trained progression.** Power arrived whole through the bond; he grows in control and knowledge, not in unlocked tiers. +- **The show never resolves the sacrifice or reunites the siblings within ch 1–100.** Promising either as a payoff breaks faith with the source. +- **The show never makes Jed a public, named Sterling power.** Secrecy is the survival premise, not a temporary phase. + +--- + +# LAYER 3 → companion: `world_ts_deep.md` · *on demand only* + +> Full cast, world mechanics (deity-bloodline system, Light Bearer powers, the Sterling empire), late-game antagonists, and relationship maps. Pulled only on a canon question, a suspected canon break, or a W5 deep dive. + +--- + +**Cross-show contamination:** checked against `series_worlds.md` — clean. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ts_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ts_deep.md new file mode 100644 index 0000000..577137f --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_ts_deep.md @@ -0,0 +1,104 @@ +# TS — Trillionaire Sterling — LAYER 3 DEEP COMPANION + +> Reference-formatted. Not in the default build path. Pull only on a canon question, a suspected canon break (W2), or a W5 deep dive. Source verified through ch 100; ch 1–20 verbatim-close, ch 20–100 sampled. + +--- + +## Full Cast + +| Character | Role | Entry | Anchor-safe? | Key facts (source) | +|-----------|------|-------|--------------|--------------------| +| **Jed (Jedidiah) Sterling** | Protagonist | Ch 1 | ✅ | ~22; Stonevale scholarship student; orphan; five jobs at once; locket activates through blood (Ch 4); physically transformed post-activation (Ch 7); the Light Bearer. | +| **Chris Jones** | Campus antagonist | Ch 1 | ✅ | "Golden son of the Jones family," trust-fund; orchestrates the betrayal/beating/trash-dump; later escalates (Ch 61+) to public allegations and worse. NOT deity-connected — new money, petty cruelty. | +| **Jenifer** | Inciting betrayal | Ch 1 | ✅ | Jed's girlfriend; "I believe in you. Always" (Ch 1) was the lie; used Jed as a "walking, talking grade-booster" (Ch 20, via Sandra); zero remorse. Catalyst, not ongoing engine — complete by Ch 3. | +| **Aurion (The Golden Deity)** | Supernatural patron | Ch 4–5 | ✅ | Golden eagle form; "Steward of Beginnings and Endings"; bound to the Sterling line since Alexander the First; SPOKE to Jed (unprecedented); lethal to perceive directly for anyone but the Light Bearer; demands the sacrifice. | +| **Ella** | Adoptive sister / stakes | Ch 6 | ✅ | ~9–10; saved from feral dogs/thugs (Ch 6); calls Jed "big brother"; daughter of Mrs. Diaz; later sheltered at King's Landing. | +| **Mrs. Diaz ("Mama Tilda")** | Stakes character | Ch 7 | ✅ | Ella's mother; respiratory infection healed by Jed's instinctive herbal brew (Ch 7); later beaten, falls into a **coma** at Stonevale General (Ch 19–20). The open wound. | +| **Sylvia Sterling** | Custodian / mentor | Ch 8 | ✅ | Tall, ethereal, violet-grey eyes; custodian of the Sterling Dynasty, near-mythical in Stonevale; bows to Jed in public (Ch 11–12); calls him "Jedidiah" / Light Bearer; commands six elite guards; runs the empire on his behalf. | +| **Damian** | Best friend | Ch 1 | ✅ | Wealthiest of Jed's friends; repeatedly offers money Jed refuses ("allow me to help you... Just once."). Unconditional loyalty. | +| **Felix, Patrick, Marcus** | Friend group | Ch 1 | ✅ | Felix = witty; Patrick = comedian; Marcus = roommate. Later kidnapped/strapped with bombs by Ruben; rescued by Jed, who knocks them unconscious to protect the secret. | +| **Mr. Harrison** | Institutional authority | Ch 10 | ✅ | GM of the Crystal Hollow; nearly ejects Jed at Chris's urging, then collapses into prostration when Sylvia bows. The wealth-shift witness. | +| **Isabelle** | Crystal Hollow receptionist | Ch 10 | ✅ | Scans and silently judges Jed's cheap clothes, then must comply with the priority "Sterling" reservation. Embodies appearance-first judgment. | +| **Dr. Armitage** | Hospital ally | Ch 20 | ✅ | Head of neurosurgery, Stonevale General; treats Mrs. Diaz; spots Jed's birthmark matching Lord Arthur Sterling — knows his identity by implication. | +| **Sandra Bellweather** | Social antagonist | Ch 20 | ✅ | Jenifer's proxy; reveals Jenifer dated Jed only as a grade-booster; continues class-based humiliation at the hospital. | +| **Alex Black** | Social antagonist | Ch 20 | ✅ | Heir to the Black fortune; reflexive wealth-contempt; calls security on Jed; recurs (Ch 88). | +| **Martin Garcia** | Antagonist (deceased) | Ch 18 | ⚠️ Dead | Gang leader; kidnapped Ella/Mrs. Diaz; killed by Jed in the warehouse (Ch 18). Brother of Ruben. | +| **Ruben Garcia ("El Lobo")** | Criminal antagonist | Ch 49+ | ⚠️ Late | Former warlord ("Wolf Pack" mercenaries); hunts Jed for Martin's death; bought a Sterling-empire executive as a mole; escalates to a bomb/hostage siege; eventually neutralized, network collapsed. | +| **Mitchell White** | Sterling operative | Ch 33+ | ⚠️ | Manager of Sterling retail properties; long-standing family associate; stunned by Jed's phone and card. | +| **Linda Park** | Classmate / contrast | Ch 40+ | ⚠️ | Tech-mogul's daughter; genuine kindness; Jed buys her a $70K sapphire necklace for her birthday (wealth-contrast IM). | +| **Kaelan & Seraphina** | Rival-family operatives | Ch ~66/91 | ⚠️ Late | Siblings; "Grade-4 enhanced" warriors sent into Stonevale by a rival family ("Vale"); Seraphina a lethal close-combat assassin (Ch 91+). The first sustained supernatural-rival threat to reach Jed directly. | +| **Athena Thorne** | Rescue subject | Ch 69 | ⚠️ Late | Saved by Jed ("Saving Athena"); en route to Stonevale General. | + +--- + +## World Mechanics + +### The Deity-Bloodline System +- **Seven deity families total** (Sterling + six others). Each deity formed an ancient covenant with one bloodline. The Sterlings, bonded to the Golden Deity, are historically the strongest and most influential. +- Rival families' powers are mostly undetailed — Sylvia names possible domains: "mastery over elements, illusions, shadows, physical force, even certain aspects of fate or knowledge" (Ch 14). Do not invent specific named-family abilities for the entry window. +- **Perception tiers:** only the Light Bearer (one per generation, direct line) perceives Aurion in full manifestation and receives direct instruction. Collateral Sterlings (e.g. Sylvia) perceive only warmth, pressure, or a flash of golden light. Non-Sterlings perceiving the Deity directly are **annihilated**. +- The rival families pooled their powers to assassinate Jed's father — an unprecedented coalition. They believe they ended the direct Sterling line. +- **The Eighth Deity (Ch 74):** a hidden eighth power whose hosts were "hunted, exterminated" centuries ago during the "last great Shadow War"; described as the only power that is "a true mirror" to Aurion. Deep late reveal — not entry canon. +- **Rival families named in the mid/late arc:** Brown, Stone, Harbour (operatives begin probing Stonevale ~ch 66–91). The Browns are flagged as the most immediate territorial rival. + +### The Light Bearer Powers +- **Physical:** speed (world goes slow-motion, outruns vehicles), strength (kills with bare hands, crushes pipe/metal), instant healing (a near-fatal beating's injuries vanished, Ch 5). +- **Senses:** night vision, hearing across blocks (heard Ella crying blocks away, Ch 6), threat perception. +- **Instinctive knowledge:** medical/herbal (diagnosed and brewed a remedy untrained, Ch 7), combat instinct (techniques never learned), cognitive enhancement. +- **The locket:** opens only to Sterling blood; post-activation contains a golden gem; a communication link to Aurion and the Sterling legacy. + +### The Sacrifice System +- Each Light Bearer faces a unique sacrifice "tailored to their life, their circumstances, their deepest connections" (Ch 13). +- **Lord Arthur's sacrifice:** could never set eyes on his own children — forcing Jed and his siblings into orphanages under false identities. Cosmic decree, not choice. +- **Jed's sacrifice:** UNKNOWN; due by the next full moon (~4 weeks from start); still "impending" / UNRESOLVED through ch 100. + +### The Sterling Empire +- **Wealth:** Jed's black-card "allowance" holds ~$1 trillion — "a tiny fraction" of overall Sterling wealth (Ch 15). +- **Holdings:** "approximately seventy percent of all significant business and real estate holdings within the city" — including Stonevale General (Sterling Medical Holdings owns the whole hospital). +- **Sterling Applied Technologies:** R&D far beyond commercial market — the one-of-one obsidian phone (no seams/buttons/logos, eagle sigil, bespoke encryption; "That's a myth," Ch 17). +- **Operatives:** elite bodyguards, intelligence, institutional contacts; Sylvia commands them; they defer to Jed. +- **King's Landing:** a ~$100M penthouse Jed acquires ~ch 33–34; where he shelters Ella and Mrs. Diaz. +- **Lord Arthur Sterling:** the previous Light Bearer; remembered by operatives (e.g. Mitchell White) for "quiet strength, unwavering integrity, profound kindness"; Jed bears his exact birthmark and is connected via a paternal ring/mark thread (Ch 81–82). + +### The Social Hierarchy (Stonevale) +- A "kingdom of heirs and golden names" (Ch 1). Wealth is visible in clothes, cars, family names; scholarship kids are invisible or mocked. +- Authority figures (receptionists, hospital staff, restaurant managers, security) treat people by apparent wealth; the same people who sneer at Jed grovel when the Sterling name surfaces. +- Tiers: Chris Jones = new money (local power, weaponized through bodyguards/bribery, insignificant vs. Sterling); the Blacks = old money (reflexive institutional contempt). + +--- + +## Relationship Map (ch 100 state) +- **Jed ↔ Sylvia:** custodian/guide; she runs operations, calls him Light Bearer, defers to his authority; warm toward Ella. +- **Jed ↔ Ella / Mrs. Diaz:** adopted family; Ella calls him "big brother"; sheltered at King's Landing; Mrs. Diaz still comatose. +- **Jed ↔ Chris Jones:** unresolved; Chris saw Sylvia bow but can't explain it; keeps escalating socially/institutionally. +- **Jed ↔ Damian/Felix/Patrick/Marcus:** they know the Sterling *name* and the phone, NOT the powers/wealth/deity/heritage. Kidnapped by Ruben, rescued by Jed (knocked out — unaware he saved them). +- **Jed ↔ Ruben Garcia:** active hunt over Martin's death; outmaneuvered, network eventually collapsed. +- **Jed ↔ rival families (Brown/Stone/Harbour):** their enhanced operatives begin probing Stonevale (~ch 66+); the macro-war's leading edge. +- **Jed ↔ Aurion:** spiritual bond; the sacrifice demand hangs over everything; little further direct communication after the entry window. +- **Jed ↔ Jenifer:** over; he deleted everything (Ch 7); she shows no remorse. +- **Jed ↔ his siblings:** known to exist, scattered in orphanages, unfindable "for now." + +--- + +## Flavor Notes +- The wealth-contrast IS the injustice engine — every scene where Jed is sneered at is a scene where the audience knows he's the richest person in the room. The dramatic irony is the central pleasure. +- The black card is the recurring IM vehicle: contempt reverses on sight — but each use risks exposure. +- Jed's humor under duress is the tonal counterweight; without it the show is just suffering. +- The Jenifer/Chris betrayal is structurally complete by Ch 3 — use it for setup, don't dwell; the engine is the hidden power, secret wealth, and the people Jed protects. +- Two layers of antagonism: mortal (Chris, Ruben — wealth and violence) and cosmic (rival deity families — existential). Entry-window promos operate in the mortal layer; the cosmic layer is destination. + +--- + +## Source / naming notes +- Source predominantly spells the girlfriend **"Jenifer"** (single n, ~46x) with sporadic "Jennifer" (~21x) inconsistencies in Ch 3. Standard: **Jenifer**. +- Source intermittently mis-renders Jed's surname as **"Drake"/"Maxwell Drake"** and the custodian as **"Jessica"** in Ch 10–11 (continuity slips). Canonical: **Jed Sterling** and **Sylvia Sterling**. +- "Mrs. Diaz" and "Mama Tilda" are the same person (Ella's mother). + +--- + +## Proven Promo History +No promos shipped. Untested IP. + +--- + +**L3 note:** This companion holds everything cut from the working doc to keep Layers 0–2 fast; nothing was lost in the relocation. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tss.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tss.md new file mode 100644 index 0000000..a8e867a --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tss.md @@ -0,0 +1,125 @@ +# TSS — The Seventh Seal — Series Worlds Entry + +> **Opening anchor:** first 5 min (the threatening twins at her bedside) / first 5 eps (rebirth, Soul Contract, dual training, Punishment Day) / first 20 eps (the heists, the Sage's arrival, Lava Valley summons). **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_tss_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 quoted verbatim from eps 1–20; Layer 2 sampled across eps 22–100. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and at the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion and loads on demand only. Build top-down; keep the top fast. + +--- + +# LAYER 0 — ESSENCE · *LOAD THIS — the only default load* + +## Three Pillars (locked) +> Canonical list: `three_pillars.md`. + +1. **Hidden Identity — the "disgrace of House Phoenix" is secretly a reincarnated master thief.** *(Thruline)* +2. **Family Politics — a noble house where the orphan ward is bullied, starved, and scapegoated by her own blood.** +3. **Lucien / Power Progression — a demon sealed inside her breaks her power layer by layer.** + +## Protagonist — Serena Vale +**Identity.** A 24th-century master thief, the "Thief Goddess," reborn into a 14-year-old noble girl of the same name. The body's original owner was a developmentally delayed "dud" (no Aura or Magic) bullied to death by her cousins. The new Serena keeps the "idiot" act as 100% performance while rebuilding power in secret — Underdog/Hidden-Identity, every vindication invisible. +**Combat.** Thief's craft, not brute force: disguise, infiltration, sleight of hand, photographic memory, cold patience. Real edge: Lucien's tutelage and freakish dual Aura/Magic advancement. Weakness: at the opening she's genuinely frail; every win is engineered. +**Power Source.** The Seven Stars Moon Seal — seven layers locking her power, placed at birth. Lucien breaks them one at a time for service. Layer 1 (ep 2): unlocks training BOTH Aura and Magic, unprecedented. Layer 2 (ep 41): restores her true beautiful face, lifts her ceiling. CANNOT skip layers, free Lucien casually, or drop the fool act. Only two of seven broken by ep 41. +**Voice.** Dry, larcenous, transactional — she narrates the world like a heist target, sizing marks and savoring petty revenge. Modern-thief sarcasm against a fantasy court. Warm only toward the few who were kind to the original Serena. Never earnest, never a stock hero. + +**Voice Samples (verbatim — never paraphrase):** +1. "Trash? Idiot? She had never been called either of those things in her life." (Ep 1) — cold defiance +2. "You've got a hell of an attitude for someone trying to make a deal." (Ep 2) — haggling with a demon +3. "Neither of them felt the two small coin purses being lifted from their belts and slipped into a certain little girl's sleeves the moment their backs were turned." (Ep 4) — thief's-eye narration +4. "Just thirty thousand demonic cores? Don't even sweat it. With my skills, I'll get you so stuffed with power you'll be sick of it!" (Ep 13) — cocky bravado +5. "If she scrubbed the grime off her own face, she'd be way prettier. If she wanted to look at something beautiful, she could just find a mirror." (Ep 59) — vain, deadpan + +**Drift tripwires.** becomes a naive/slow learner | wins through brute strength | drops the "idiot" act publicly before the show does | gets her vindication acknowledged openly | turns earnest-heroic | Lucien named/explained early. + +## Setting — Entry-Window World +**Feel.** The Ardunian Empire on the Brilliance Continent — Aura, Magic, and bonded mythological beasts. Serena lives inside House Phoenix, one of the Five Great Houses: opulent, beautiful, rotten with internal knife-fighting over inheritance. She occupies its lowest rung — fed scraps, dressed by sneering maids, barred from the banquet. Power is the only currency, beauty the only social capital; she is publicly bankrupt in both. + +**Sensory Samples (verbatim):** +1. "A boy and a girl, maybe fourteen or fifteen, stood beside her bed with their arms crossed... they both shot her the same look of pure contempt, as if they were looking at a piece of garbage." (Ep 1) +2. "Calling it 'helping her dress' was generous. This was more like a daily dose of torture." (Ep 4) +3. "She was a plain sparrow in a flock of peacocks." (Ep 19) + +**Drift tripwires.** modern/sci-fi tech in the world | House Phoenix portrayed as warm | Serena openly wealthy/respected | the Five Houses depicted as allies rather than rivals. + +## Tone Constraint +Dark vindication played as wry pleasure, never grimdark. The abuse is real and lethal, but Serena's POV reframes it as a long con she's quietly winning. A pure-tragic-victim promo — without the thief's relish and the comedy of the Phoenix and the demon — loses the show's texture. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor — load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +Serena wakes scarred and half-dead to two beautiful cousins (Clara and Caleb) at her bedside calling her "trash," "the disgrace of House Phoenix," and threatening her into silence. They tricked her into a beast dungeon where she was mauled and left for dead. As they sneer, the dead girl's memories flood in: the body's owner died, and a 24th-century master thief now wears her face — playing the fool, plotting her hand. + +## First 5 episodes *(the first sitting)* +Rebirth and inherited memories (ep 1). Lucien — a demon bound inside her by Soul Contract — offers to break her seal for his freedom; he cannot kill her without destroying himself (ep 2). First seal breaks: she can now train both Aura AND Magic, unprecedented (ep 2–3). Five days of his training vaults her past ranks that took her cousins years (ep 4). "Punishment Day": hauled before family head Adrian Vale over the trespass — and she picks the maids' purses on the way in (ep 4–5). + +## First 20 episodes *(texture band)* +The hearing exposes the dead Snow Spirit Fox (Lucien "crushed it") and the house's lost shot at the Celestial Phoenix (eps 5–8). Adopted brother Silas Vale returns with a replacement fox and pardons her (eps 9–11). Clara tries to burn Serena's face; Serena trips her into her own fire — Clara loses her hair, never tells (eps 10–11, 17). Needing 30,000 demonic cores to break seal two, Serena robs House Phoenix, then Houses Dragon/Tiger/Tortoise, fencing the loot through House Griffin's auction house (meeting heir Rian Kestrel) (eps 12–18). The Sage arrives to awaken the Phoenix; Adrian shockingly names Serena a candidate and the family departs for Lava Valley (eps 18–20). + +## HARD BLOCKS *(opening-binding)* +1. **Serena's "idiot" act is 100% performance — she is a fully competent reincarnated master thief.** Naive/slow-learner framing destroys the dramatic-irony engine. +2. **The original Serena was a real "dud" who died at thirteen from injuries inflicted by Clara and Caleb.** Load-bearing tragedy; don't soften the cause. +3. **Lucien is a demon bound by Soul Contract; he cannot kill her (would cost nine-tenths of his soul).** His name, origin, and reason for being inside her are UNRESOLVED — do not invent. +4. **The Seal has seven layers; only the first two are broken by ep 41.** Don't break more unless source does. +5. **Serena trains BOTH Aura AND Magic — unprecedented in centuries.** Don't understate it or collapse to one path. +6. **The Celestial Phoenix chose Serena, rejecting Alaric, Clara, Caleb.** It manifests as an arrogant 3–4-yr-old boy — not docile, not a giant bird. +7. **At Saint Laurent Academy she enrolls disguised, registered as an alchemist/herbalist.** Don't break cover unless selling the exposure threat. +8. **Serena secretly pursues the Warlock path — despised, near-extinct, hunted by the God Realm.** Her most dangerous secret; don't expose unless that's the arc. + +## Entry map *(tease ok, anchor flags)* +- **Lucien / Soul Contract** — ep 2. Anchorable. +- **Dual Aura/Magic training** — ep 2–4. Anchorable. +- **Heist arc / Griffin Auction / Rian Kestrel** — ep 12–14. +- **Celestial Phoenix (boy form), chooses Serena** — ~ep 27–29. Don't anchor a pre-Lava-Valley promo on the bonded Phoenix. +- **Second seal broken / true face restored** — ep 41. Tease, don't anchor. +- **Saint Laurent Academy + disguise** — ~ep 42–44. +- **Warlock path / Edmund Pierce / Dean's warlock hunt** — ~ep 56–73. Tease only. + +## Engines the opening supports +1. **Underdog Awakening / Hidden Identity (UNTESTED, STRONGEST):** the "disgrace" is secretly a master thief rebuilding power; every reversal stays invisible. +2. **Injustice Engine (UNTESTED):** systematic abuse — starved, dressed by sneering maids, nearly burned, scapegoated; dense and personal. +3. **Secret Identity (UNTESTED):** nested secrets — reincarnated soul, dual training, the demon inside, later Warlock path and male disguise. +4. **Bond / Companion comedy (UNTESTED):** the smug demon Lucien and the arrogant child-Phoenix as bickering foils. + +## IM sources — opening window +- **Bedside threat** (Ep 1): scarred near-death girl threatened by the cousins who maimed her. *Injustice, T1* +- **The dressing "torture"** (Ep 4): maids strip and yank her like a scullery rat. *Injustice, T2* +- **Scapegoated for the fox** (Ep 8): the whole house turns to glare, ready to tear her apart. *Injustice, T2* +- **Clara's fire turned back** (Ep 10–11): the abuser falls into her own flames. *Vindication-tease, T3* +- **Phoenix chooses the "disgrace"** (Ep 29): the "ugly" nobody wins what the family craved. *Vindication, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** an abused, scarred orphan girl, written off as a worthless idiot by her own noble family, secretly holds the power to bury them all. +- **T2 (supporting):** the daily cruelty — starved, dressed like trash, barred from the family table, scapegoated for a disaster she didn't cause. +- **T3 (deepening):** her vindication must stay secret; she can never be seen winning, which sharpens every quiet victory. +- **Drift risk:** skip the injustice layer and lead with heist-comedy or the Phoenix, and the promo loses the empathy nerve that drives completion and CTI. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **The seven-layer seal** — only two of seven broken by ep 41; pays off across the series. The locked power and the demon's hidden agenda are the spine — initiate, never resolve. +2. **Why is Lucien inside her?** — he refuses to say until all seven seals break (ep 2). A genuine open loop; tease, never answer. +3. **The Celestial Phoenix chooses the "disgrace"** — awakens ~ep 27–29 and picks Serena over the family's prodigies. Strong single-beat reversal; the bond's payoff lives in the app. +4. **The Warlock secret at Saint Laurent** — Serena secretly studies the forbidden, near-extinct Warlock path (~ep 56+) while Dean Aurelius Vance hunts the warlock he senses on campus (~ep 72–93). Ticking-clock exposure thread. +5. **Silas Vale is not what he seems** — the warm adopted brother is on a hidden agenda; his true nature stays unresolved. Tease the mystery, don't crack it. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Serena win in the open.** Her competence stays a secret performance — vindication is private, not public acclaim. +- **The show never resolves Lucien's origin or frees him** within the verified window. +- **The seal never fully breaks** — power comes in metered layers, never all at once early. +- **The Celestial Phoenix is never a docile, majestic mount** — it's a rude, ancient child who insults her. +- **Serena's parents' murder is never explained** (Lucifer Vale and Celeste Alarie killed when she was one month old; circumstances unknown — do not invent). + +--- + +# LAYER 3 → companion: `world_tss_deep.md` · *on demand only* + +> Full cast · house politics · magic/rank systems · the heist mechanics · academy structure · Warlock lore · relationship maps · flavor. Pulled on a canon question, a W2 break-check, or a W5 deep dive. + +--- + +**Cross-show contamination:** checked against `series_worlds.md` index — clean. (Note: a "Sterling" surname appears as a minor academy classmate, Clyde Sterling, ep 59 — unrelated to TS/Trillionaire Sterling; do not cross-wire.) diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tss_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tss_deep.md new file mode 100644 index 0000000..1f40299 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_tss_deep.md @@ -0,0 +1,71 @@ +# TSS — The Seventh Seal — Layer 3 Deep Reference + +> Companion to `world_tss.md`. On-demand only. Reference-formatted. Source-verified across eps 1–100 (eps 1–20 closely; 22–100 sampled). **L3 note:** all material below is reachable but NOT opening-anchored — tease forward, never start a promo from it. + +--- + +## Full Cast — House Phoenix + +| Name | Role | Entry | Hook-anchor safe? | Notes | +|------|------|-------|-------------------|-------| +| **Serena Vale** | Protagonist | Ep 1 | Yes | Reincarnated 24th-c. "Thief Goddess"; age 14; "disgrace of House Phoenix." | +| **Adrian Vale** | Family Head, grandfather | Ep 2 | Yes | Sixties, hawk-eyed, silver hair. Tolerates Serena out of respect for his dead son Lucifer. Names her candidate (ep 19) and successor (ep 41) — his angle is a deliberate, unexplained plan. | +| **Clara Vale** | Cousin, antagonist | Ep 1 | Yes | 15 (turns 16 in a month); Fifth-Rank Magic. Vain, cruel. Loses her hair to her own fire (ep 11). Crushes on Silas. | +| **Caleb Vale** | Cousin, antagonist | Ep 1 | Yes | 15, Clara's twin; Fourth-Rank Aura. Follower until the Phoenix cave, where he turns on Clara. | +| **Marcus Vale** | Clara & Caleb's father | Ep 5 | Yes | Master manipulator; deflects blame off his kids. Gaius's rival. | +| **Gaius Vale** | Adrian's favored son, heir | Ep 7 | Yes | Alaric's father. Wants Serena gone. | +| **Alaric Vale** | Top 3rd-gen prodigy | Ep 6 | Yes | 17; Three-Star Swordsman at Sixth Rank Aura — first since Lucifer. Rejected by the Phoenix (ep 28). | +| **Silas Vale** | Adopted brother | Ep 9 | Tease | 18, adopted by Adrian 10 yrs ago, not blood. Fiercely protective of Serena. Drops warmth in private, speaks to Adrian as an equal — hidden agenda, UNRESOLVED. | +| **Fabian Vale** | Adrian's least-useful son | Ep 7 | Yes | Drinker/womanizer; loses most to the heist. | +| **Linus Vale** | Adrian's 4th son, runs the dungeon | Ep 5 | Yes | "Painfully average," not the favorite. | +| **Doctor Reed** | House physician | Ep 2 | Yes | Old, childless; treats Serena like a granddaughter. The original Serena's only kindness. | +| **Lucifer Vale** | Serena's late father | Ep 5 (backstory) | Tease | Adrian's favorite; prodigy of Magic + literature. Murdered when Serena was one month old. | +| **Celeste Alarie** | Serena's late mother | Ep 5 (backstory) | Tease | "Most beautiful woman in the Ardunian Empire." Origins unknown. Murdered with Lucifer. | + +## Full Cast — Outside the House + +| Name | Role | Entry | Notes | +|------|------|-------|-------| +| **Lucien** | Demon bound in Serena | Ep 2 | Soul Contract; breaks the seal layer-by-layer; can't kill her. True name/origin UNRESOLVED — won't tell until all 7 seals break. | +| **The Celestial Phoenix** | Bonded mythological beast | Ep 27 | Ancient fire phoenix in the form of an arrogant 3–4-yr-old boy; scarlet hair/eyes, pointed ears. Hates the God Realm, hates women, calls Serena "ugly." Chooses her. | +| **The Sage** | God Realm envoy | Ep 18 | Awakens the Phoenix via a Golden Compass. Finds Serena "charming." Treated like royalty continent-wide. | +| **Rian Kestrel** | Heir of House Griffin | Ep 14 | "Third Young Lord," ~16–17; business prodigy who "could sell scrap metal for the price of gold." Runs Griffin Auction House; later a Saint Laurent 2nd-year. Suspects Serena's thief identity. | +| **Abel** | Griffin Auction manager | Ep 14 | ~50; fences Serena's loot, sources demonic cores, gifts her interspatial rings. | +| **Edmund Pierce** | Author of the warlock journal | Ep 57 | 50–60-yr-old script; the seminal warlock text the Old Man leaves out for Serena. | +| **The Old Man (Warlock Tower keeper)** | Mentor-to-be | Ep 56 | Normal human (no Aura/Magic); guards the dead Warlock Division. Deans defer to him. Deliberately leaves a top-floor treasure-tier journal for his unseen student. | +| **Aurelius Vance** | Dean of Saint Laurent | Ep 57 | Three-Star Great Archmagus (level 33) — only one in empire history; most powerful magus in Ardunia. Protects the Warlock Division; later hunts the campus warlock. | +| **Nash Drake** | Serena's academy "friend"/informant | Ep 56 | Herbalist Division; lecherous gossip; feeds Serena campus intel. | +| **Snow Spirit Fox** | Eighth-Rank beast | Ep 5 | The dungeon beast Lucien "crushed"; the Sage's required gift to awaken the Phoenix. | + +## World Mechanics + +- **Two power paths.** Aura (strong body, gathers Aura via the Nexus → warriors) vs Magic (mental energy → mages). Conventional wisdom: a strong body means weak mind and vice-versa; no one in centuries has trained both. Serena trains both (unprecedented). +- **Ranking.** First five ranks = "Apprentice" (Magician/Fighter). At Sixth Rank you specialize. Magic → Magus (offensive), **Warlock** (Curses, hand-signs, no chanting), or Priest (holy). Aura → Swordsman, Knight, or Archer. Serena chose **Archer** (Aura) and is secretly pursuing **Warlock**. Magus ladder: Apprentice → Junior → Intermediate → Senior → Great Magus → Archmagus → **Great Archmagus**. 5 stars per rank; ~4–5 yrs per star. +- **Combat math (ep 6).** A warrior's strength ≈ 40% Aura/Magic, 30% mythological beast, 30% holy weapons (holy weapons rare, so historically ~50/50 self vs beast). Hence beast-bonding is second only to self-cultivation. +- **The Seven Stars Moon Seal.** Seven layers, placed at birth, suppressing all power (and her true face). Layer 1 (ep 2): unlocks Aura+Magic training but caps progress. Layer 2 (ep 41): restores original beautiful face, lifts ceiling. Each break = pain/blackout. Lucien needs absorbed energy to power each break. +- **Demonic cores.** Dropped by Demon Beasts (malevolent species, distinct from magical beasts; high ones shapeshift to human form, eat human organs). Cores hold dense dark energy — corrupting, mostly considered useless scrap, sold cheap at auction. Lucien absorbs them via Serena's body (light streams into her brow). To break seal 2 Lucien demanded 30,000 low-grade (or ~2,000 high-grade) cores — driving the heist arc. Later seals need mid/high-grade cores. +- **Interspatial rings.** Storage devices; grade = capacity (her first: ~175 cu ft; Abel's gift: ~3,500 cu ft). +- **Disguise Potions.** Three grades; low-grade lasts ~3 hrs, 5 bottles cost 500 gold. Serena also uses cheap cosmetics/tinctures (her thief kit) to fake plainness after her face is restored. + +## Geopolitics + +- **The Ardunian Empire**, on the Brilliance Continent, founded under five ancient mythological beasts. Ruled by a Monarch; five Great Houses. +- **The Five Great Houses:** Phoenix, (Azure) Dragon, (White) Tiger, (Black) Tortoise, Griffin. Each tied to one of the five founding beasts — all of which fell dormant ~a century ago; none re-awakened until the Sage returns. Houses feign friendship but are rivals. Griffin is the richest (vaults rival the Imperial Treasury). Serena robs Phoenix, Dragon, Tiger, Tortoise — never Griffin (her fence). Hits the Imperial Treasury too (~700 high-grade cores, ep 40–41). +- **The God Realm.** A small, army-less but untouchable realm of "divine envoys"; no empire dares challenge it. Source of Sages who alone can awaken mythological beasts. Actively suppresses warlocks. +- **The Silver Hand Guild.** Continent's most infamous thieves (based in the Zephyrian League); their leader announces targets before striking. Serena is mistaken for them, then ruled out. + +## Warlock Lore (~ep 56–73, tease only) + +- Once popular (~a century ago), warlocks fell from grace when two of the three strongest used forbidden curses to experiment on people — fusing humans with magical beasts, killing high-level masters. The God Realm hunted them; "warlock" became synonymous with "evil." Now near-extinct continent-wide; Saint Laurent's Warlock Division hasn't taken a student in years. +- Warlocks cast Curses via hand-signs (no chanting). Skills are combinatorial — a single "combination curse" may need 7–8 base curses as foundation. Blood curses come naturally to Serena. A trained one-star warlock can reportedly take three other-class opponents at once. + +## Saint Laurent Academy + +- Most prestigious academy in the empire; six divisions (Magus, Warlock, Priest, Swordsman/Knight/Archer combat tracks, Herbalist/Alchemist, etc.). Sky-high tuition + entrance-exam talent bar. Serena enrolls as an alchemist/herbalist on Adrian's orders, disguised, while secretly studying Warlock (and needing Archer training). Class Allocation Test (~ep 60) controversially mixes divisions into teams. Notable top students: Rian Kestrel, Larry Carter, Dan Delcruz (Magic), Dorian Douglas (Archer), Clyde Sterling (Herbalist), Corbin Shaw (Knight). + +## Flavor Notes + +- The original Serena's inherited memories are fragmentary — "darkness and an endless, suffocating fear" of the dungeon; she can't recall what happened to the Snow Spirit Fox (it was Lucien). +- Whispers persist that Serena isn't truly Lucifer's child (she looked too plain) — silenced only by Adrian. The face-restoration (ep 41) ends that doubt: she's the image of her beautiful parents. +- Running gag: Serena's thief reflexes ("old habits died hard"; fingers itch to pocket Griffin's wares). The Phoenix sniffs her like a dog; Lucien needles her ("You barely count as a girl, let alone a woman," ep 28). +- The "Lava Valley" Phoenix-bonding arc (~eps 22–32) is a contained sub-arc; do not anchor opening-window promos on it. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_wbt.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_wbt.md new file mode 100644 index 0000000..e9c61e2 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_wbt.md @@ -0,0 +1,118 @@ +# WBT — Weakest Beast Tamer — Series Worlds Entry + +> **Opening anchor:** first 5 min (the gray-egg ceremony) / first 5 eps (forest origin) / first 20 eps (Academy arrival). **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_wbt_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — Layers 0–1 from a close read of eps 1–20; Layer 2 + canon limits sampled across eps 20–100. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) + canon gate (limits). Layer 3 is on demand. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +1. **Hidden Potential / Reversal Promise** *(Thruline)* +2. **Rank = Social Class** +3. **Academy Setting** + +## Protagonist — Ren Patinder +**Identity.** A ten-year-old outskirts boy whose elderly parents sold their house for one Academy placement and the cheapest gray egg. At his ceremony the egg yields a *spore* — the 0.01% outcome, "the weakest beast ever recorded." Status zero; after a near-death forest accident he gains encyclopedic beast knowledge no one else has. The gap between what he knows and what he can prove is the engine. +**Combat.** He fights with his own small body, never a beast proxy. He wins by reading mana-pattern flaws — a rival's cultivation defect, the exact angle a scale joint can't cover — and striking the precise weak point. Knowledge, not force. +**Power Source.** The spore grants only **+10% physical strength — that is all it gives.** The *knowledge* is a separate effect of an ancient three-ingredient medicine completed in his blood. It flows through luminescent hair-mushrooms (cosmetic). Hard ceiling: clear to Silver 3; Gold and abyssals are a total void. +**Voice.** Soft-spoken, intellectual, internally narrated; apologetic under humiliation but privately certain. Talks to his spore. Uses his father's cooking metaphors. No bravado. Trembles from excitement/frustration, not fear. + +**Voice Samples (verbatim):** +1. "Why you? With such low chances, why did it have to be you?" (Ep 4) — bitter, to the spore +2. "If you're going to follow me on this journey, you'd better at least not get in my way." (Ep 5) — practical +3. "At least you're good for something. Even if just as a lamp." (Ep 8) — survival wit +4. "It works. It really works." (Ep 11) — young wonder +5. "I won't. My spore isn't weak. And I'm going to prove it." (Ep 17) — firm, no doubt + +**Drift tripwires.** Hides spore to avoid mockery | wins through strength/beast-proxy | spore secretly powerful all along | spore personified as a named companion pet ("Cloud") that nuzzles/shields/leads | hero-confident voice | omniscient tactical genius (loses the Gold/abyssal void) | loses internal monologue. + +## Setting — Entry-Window World (Outskirts → Forest → Academy) +**Feel.** A rigid cultivation society where egg color sorts your life at age ten: gray = failure, black = royalty. Ren's home is a tilted rented cabin on the mana-poor outskirts, kitchen-scented, three candles. Past it: a dark forest of starving expelled beasts, then an ancient spore-tunnel and a crystal cave. Then the marble Imperial Academy, built over ruins, where rank is publicly visible and no adult protects the low-ranked. + +**Sensory Samples (verbatim):** +1. "The aroma escaping through the door's cracks made Ren's stomach growl traitorously. His parents were talented cooks." (Ep 3) +2. "Three bioluminescent eyes that glowed with a hypnotic radiance, capable of paralyzing their prey with just a direct look." (Ep 6) +3. "The air here felt older… quieter… as though it remembered things long forgotten." (Ep 8) + +**Drift tripwires.** Forest as safe/navigable | parents young & healthy without frailty | Academy as welcoming to the low-ranked | egg color as destiny-myth rather than purchased economic sorting. + +## Tone Constraint +Underdog *information-asymmetry* drama, not a power fantasy. Ren's edge is invisible knowledge that gets him mocked, not strength. If a beat lets him simply overpower an opponent, it has broken the show. + +--- + +# LAYER 1 — ACTIVATION CANON · *load at W1 + canon gate* + +## First 5 minutes *(the 50%-drop gate)* +The Ceremony of Ten Years. Children contract beasts that cure their mana poisoning; the beast's rank fixes their caste ("Iron for the slaves… Silver for the privileged"). Classmates draw fire salamanders and a Gold-potential shadow wolf. Ren's gray egg "simply cracked. A dry, pathetic sound" — a gray spore, the 0.01%. The hall laughs; mushrooms sprout from his scalp: "Look! He's rotting!" A child's whole future dying on schedule, by purchase, in public. + +## First 5 episodes *(the first sitting)* +The funeral-feast nobody eats; Ren runs to the forest seeking a "miracle medicine" to replace the spore. Moon Toads, a Night Excavator, a starving Bronze Mirror Mantis; he falls into an ancient spore-tunnel, the dormant spores consume the Mantis, and a crystal-cave plant — the "female" half of the medicine his mother once took — completes in his blood. **Knowledge floods in.** Parents find him; unconditional-love reunion. He takes the Mantis core, sees his parents' plants can be fixed by a 1,000-day method, and binds them to that promise. + +## First 20 episodes *(texture band)* +Carriage to the Academy: Jin's trio attacks, Luna Starweaver (best beast in class) intervenes; Ren refuses to hide his mushrooms. Gray Wing room 15 (roommates Min/Taro/Liu), the merit/support economy, the gathering-duplication wealth engine, ruins humming beneath. Professor Wei publicly mocks Ren's "heretical" cultivation correction; the first proof-fights begin (Kai's scale-flaw defeat, ~ep 24). + +## HARD BLOCKS *(opening-binding)* +1. **The spore grants only +10% physical strength — nothing else.** It is genuinely the worst beast recorded, not a secret legendary in disguise. Any promo showing the spore as directly powerful in combat breaks the thesis. +2. **The hair-mushrooms never evolve into a combat power or a creature.** They glow (light/camouflage) and pulse to carry knowledge; through ch 100 they remain cosmetic and "dormant." They never become a weapon, a beast, or a dragon. +3. **Beasts do not fight each other Pokémon-style.** Power comes from the *human's* contracted beast(s) fused into the tamer's body. (Yino's edge is humans bearing *two* beasts via abyssal fusion — see below.) +4. **The knowledge is unique to Ren and uncopyable.** It needs the male plant + female plant + a host born with the first half (his mother ate the male; Ren is the missing key). No one else can gain it. +5. **The knowledge has a hard ceiling: Silver 3.** Gold-and-above and all abyssals are a total void — genuine danger remains. +6. **Egg color is purchased economic sorting, not destiny mythology.** Eggs come from underground mana veins near "mother" dragons; the kingdom sells them. Gray is cheapest. +7. **Ren's parents are 60 (mature-Iron plants make them look ~40).** Their frailty is load-bearing — it drives his urgency. +8. **The spore is not a named companion character — there is no "Cloud."** Ren's contracted beast is *the spore*: a fused, near-inert fungus that grows cosmetic hair-mushrooms. It is NOT a sentient pet with a name. It does not nuzzle, shield, bleed, weep, fist-bump, "lead the way," or function as a bond-object / stakes-character. The empathy bond that carries the show is **Ren ↔ his parents** (and the 1,000-day promise), not Ren ↔ a cute creature. Personifying the spore into a companion named "Cloud" is the same category error as putting two beast tamers in FLBM — it sells a show that does not exist. *(Note: "Spore Cloud," "Rotting Boy," and "Pearl Crystal" are legacy shipped-promo **titles** in the benchmark/reference data — the titles are fine; the **in-story personified beast named "Cloud"** inside those promos is the violation and must not be reused.)* + +## Entry map *(tease ok, anchor flags)* +- **Knowledge awakening** — ~ep 10 (crystal cave); opening *may* anchor here (origin arc). +- **Academy / merit economy** — ~ep 17. **Professor Lin (trainer)** — ~ep 25. **Mining strategy** — ~ep 26+. +- **Expedition / abyssal thriller (Zhao, Adrian, fusion)** — ~ep 44. +- **Deep mines, hydra eggs, second-beast plan** — ~ep 74+. +- **Cousin spy network / Luna = King's niece** — undercurrent from ~ep 56; never revealed in-world by ch 100. + +## Engines the opening supports +1. **Underdog Awakening (UNTESTED):** verified worst beast, public rank-shame, invisible edge — every win looks impossible from outside. +2. **Secret Power / Hidden Advantage (UNTESTED):** he sees what no one can prove; the knowledge-vs-proof gap is the core loop. +3. **Bond / Family Loyalty (UNTESTED):** parents sold everything; the 1,000-day promise is faith, not belief. +4. **Institutional Injustice (UNTESTED):** egg-color caste, a merit system rewarding existing wealth, Wei's sabotage. + +## IM sources — opening window +- **Gray egg cracks → spore** (Ep 1): the 0.01%; future dies in public. *Status Destruction, T1* +- **Mushrooms sprout / "He's rotting!"** (Ep 2): humiliation sealed. *Public Humiliation, T1* +- **Parents see the spore; "hope abandoned their eyes"** (Ep 3): yet "My little tamer." *Emotional Devastation, T1* +- **The untouched feast** (Ep 3–4): a celebration that became a funeral. *Family Sacrifice, T1* +- **Knowledge awakening** (Ep 10): every beast turns transparent. *Power Awakening, T1* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** a child's entire future is destroyed in public by an egg his parents bought after selling their home — and everyone laughs. +- **T2 (supporting):** his one real gift (knowledge) is invisible; he's mocked for the very mushrooms that carry it and can prove nothing. +- **T3 (deepening):** the system is rigged — merit rewards wealth, Wei sabotages him, frail elderly parents are running out of time. +- **Drift risk:** if a promo leads with the cool knowledge/competence and skips the public shame + family sacrifice, empathy collapses and it reads as a flex, not an injustice. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **The Wei bet** — Ren stakes all his Academy support on Taro's "impossible" beetle evolving exactly as he predicts. Pays off later (beetle's Living-Tunnel evolution). Initiate the stakes; never deliver the vindication. +2. **The 1,000-day parent promise** — will their plants actually reach Bronze-2 power and extend their lives? Pays off only past ch 100 (ritual still running). Pure faith-against-evidence. +3. **Luna's secret** — the cold girl who defends him is the King's niece, undercover with a cousin spy network. Reveal lives deep (undisclosed in-world by ch 100). Tease the mutual-surveillance romance, never out her. +4. **"Ten million crystals"** — Ren's vow to buy his parents the city life they deserve; the explicit, calculable money-gap. Pays off far out; sell the climb, not the arrival. +5. **The stolen hydra egg → Yino threat** — Ren robs a gold-rank hydra's egg; a surviving Yino agent now hunts the unknown thief (him). Pays off post-ch 100. Tease the closing net. + +## 2b · Canon Limits / Never-Happens +- **The spore is never a named companion character ("Cloud")** — it is the fused fungus, not a sentient pet; it never nuzzles, shields, bleeds, weeps, fist-bumps, or leads the way. The bond is Ren ↔ parents, not Ren ↔ a creature. +- **The mushrooms never evolve into a combat power or creature** — cosmetic and "dormant" through ch 100; no dragon, no weapon, no beast. +- **The spore never becomes directly powerful** — its only stat is +10% strength; every Ren victory is knowledge + precision, never overpowering. +- **Beasts never battle Pokémon-style** — humans fight using their fused beast(s); the "fusion" horror is human tamers merging with beasts, not beast-vs-beast duels. +- **Ren never reveals his knowledge source** — he must engineer indirect "proof"; he can't openly explain or he sounds insane. +- **The show never lets Ren read Gold/abyssal beasts** — the ceiling is real and keeps producing danger. + +--- + +# LAYER 3 → companion: `world_wbt_deep.md` · *on demand only* + +**Cross-show contamination:** WBT and **FLBM** are both beast/academy underdog shows — keep them distinct. WBT's hero is **Ren** with a knowledge-granting **spore** + cosmetic hair-mushrooms (caste by beast rank); FLBM's hero is **Karl**. Do not let Ren/spore/mushrooms bleed into FLBM or vice versa. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_wbt_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_wbt_deep.md new file mode 100644 index 0000000..870ca3e --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_wbt_deep.md @@ -0,0 +1,138 @@ +# WBT — Weakest Beast Tamer — Layer 3 Deep Companion + +> On-demand Layer 3 only. Not in the default build path — pulled for canon questions, W2/W3 canon-break checks, or a W5 deep dive. All facts trace to the eps 1–100 source. Reference-formatted; scan, don't read. + +--- + +## Full Cast + +> **Canon guard — "Cloud" is NOT in this cast.** Ren's contracted beast is *the spore* (a fused, near-inert fungus → cosmetic hair-mushrooms), not a sentient companion with a name. There is no pet named "Cloud." If a brief, beat sheet, or legacy reference treats the spore as a character that nuzzles / shields / bleeds / leads, that is a HARD BLOCK 8 violation (see `world_wbt.md`). The empathy bond is Ren ↔ his **parents**. + +### Core +| Character | Role | Key detail (source) | +|---|---|---| +| **Ren Patinder** | Protagonist | 10yo, red hair, green eyes, scrawny. Spore = 0.01% gray-egg outcome, +10% strength only. Gained Silver-3-ceiling beast knowledge after completing an ancient medicine (ep 10). Knowledge runs through cosmetic hair-mushrooms. By ch 100: cultivating spore toward Bronze, holds a stolen diamond-hydra egg + hunter-bug egg, a mirror-mantis core charging on a 300m vein, ~105k crystals earned, trains under Lin. | +| **Father** | Emotional anchor | Age 60, mature-Iron plant, cook. Years ago, searching for mana-poisoning medicine, found the "male" miracle plant; gave it to his wife thinking it was sweet root. Survival skills via stories; cooking metaphors. Began the 1,000-day ritual on faith. Shows early mana-poisoning signs (ep 15). | +| **Mother** | Emotional anchor | Age 60, mature-Iron plant, cook. Unknowingly ate the male plant; conceived Ren ~age 50 after ~30 yrs infertility — which makes Ren the medicine's "missing key." "We always have been [proud]." | +| **Luna Starweaver** | Ally / love interest / secret royal | Blue hair; Shadow Wolf, Gold potential (500–1000% possible). Cold, calculating, curious about Ren; reads lies via wolf-enhanced mana sight. Defends Ren from bullies (ep 16). Secretly the **King's niece**, undercover with a cousin spy network + disguised handmaidens. | +| **Professor Lin** | Trainer / comedic warmth | Young woman; Swift/Crane beast stuck at Bronze 1 from a cultivation error, but technique lets her beat Silver opponents — a mirror to Ren's "ruined" spore. Picks Ren to train (ep 25); brutal-but-caring (cheek-pinching, forced eating, recovery pills). By ch 100 suspects Ren is hiding mine secrets. | +| **Professor Zhao** | Expedition leader / patron | Mist Owl, Silver 3; "The Hunter of Yano," 42+ Yino agents eliminated. Silent Flight (invisibility + sound projection). Trusts Ren's mirror-plate illusion mid-combat; gives him 100k credits + medicine. Absent post-expedition investigating the Silvercliff conspiracy. | +| **Professor Wei** | Institutional antagonist | Silver 2 Manticore; teaches cultivation theory/crystal processing. Publicly humiliates Ren for "heretical" corrections; bets Ren's entire school support that Taro's beetle won't evolve as predicted; expels Ren from both his classes (accidentally freeing his mornings). | +| **Taro** | Closest ally | Digger Beetle ("Bronze max" per records); bookish, anxious. Ren predicts a Silver-3 "Living Tunnel" evolution — the substance of the Wei bet. Early into Ren's 100-day method; served as a fake-mushroom decoy. | +| **Min** | Roommate / range support | Water Snake; cheerful. Healed a wounded auxiliary during the abyssal attack using a mana-spiral technique Ren taught him on the spot. | +| **Liu** | Roommate / senior advisor | Second-year repeating units; Night Bat. Skeptical but increasingly impressed; explains Academy economy/merit systems to Ren (and the audience). | +| **Jin** | Student bully lead | Spirit Tiger (Silver potential, but a cultivation defect caps it). Leads Kai + Cass. Attacks Ren in the carriage; later falls into Ren's mine traps. | +| **Kai** | Bully secondary | Stone Lizard; green scales (should be blue — earth-mana defect). Ren beats him by striking the crossed mana-line in "Speed Mode" (ep 24) — the show's thesis fight. | +| **Cass** | Bully secondary | Lesser Fire Eagle; mana-absorption defect caps it at Bronze 2. Tactical spotter. | +| **Klein Goldcrest** | Noble rival | Golden Lion, Gold potential. Pursues Luna (rejected). His clique = the rich-kid benchmark. Secretly one of the spy network's poorly-hidden targets. | +| **Director Ignatius Aurelius** | Academy head | Royal Phoenix (Gold). Knows the cousins' true identities; sends a spy-girl to observe Ren; authorizes Zhao's award; fights the Yino agent at ch 99–100. | + +### Secondary / Situational +| Character | Notes | +|---|---| +| **Ceremony Master** | Silver 2; ran the ceremony, announced Ren's spore with "poorly disguised amusement." | +| **Ron Blackfire** | Crimson Salamander (Iron→Silver potential); the "success" immediately before Ren's failure. | +| **The Spy Girl** (unnamed) | Director's agent + Ren's classmate; iron-rank but exceptional blink/teleport beast. Followed Ren to 300m, witnessed the Yino agent + hydra, reported to the Director. Lin spotted and chased her, lost her. One of three cousin-tier blink users. | +| **Larissa** | King's **daughter** (the princess); Will-o'-the-wisp beast; undercover noble; cousin network. | +| **Liora** | Mineral Light Fairy beast; undercover noble; third cousin. | +| **Adrian Ravencroft** (deceased) | Yino agent; arachnid abyssal, three mouths/five eyes. Absorbed his own subordinate + a Shadow Stalker corpse for "complete fusion." Revenge for son Marcus (killed by Zhao). Hired by First Minister Silvercliff of Yano. Killed by Zhao + Ren's mirror-plate illusion (ep 62–69). | +| **The Yino Mine Agent** (alive) | Gold hippogriff + abyssal scorpion (double tamer). Spent months in the deep caves growing a hydra egg on the mana vein for a Yino "princess." Ren stole it; agent survived the Director's ambush and now hunts the unknown thief. | +| **The Supervisor** | Ice Penguin, Silver 2; froze the slope to help stall the hydra (ep 90). | +| **Peter/Marco** | Rock Mongoose mine guard; comic terror. | +| **Jessy** | Exchange clerk; cat-spirit appraiser; helped Ren sell skins / found Zhao's letter. | +| **Mister Finch** | Academy banker; White Mouse; suspicious of Ren's impossible earnings. | +| **Isaac** | Workshop tanner; taught Ren skin-processing. | +| **Professors Yang / Mei / Song** | Combat (Stone Behemoth); History-Economics-Life; Crystal-gathering/mine instructor. | + +--- + +## World Mechanics + +### Beast contract & mana poisoning +- Children accumulate toxic mana; by age 10 the **Ceremony of Ten Years** contracts a beast that absorbs it, curing the poisoning. Contract is permanent, for life; the beast fuses with the body (scales, claws, markings — or, for Ren, hair-mushrooms). +- Eggs are purchased; **color sets the outcome band.** Gray (cheapest) yields: Common Plant 94.99% / Marsh Frog 5% / **Spore 0.01%**. Black (most expensive) can yield Gold potential. +- Beasts grant **percentage attribute increases** that scale with evolution. Iron Crimson Salamander: +40% str, +20% all, fire. Common Plant: +20% vitality, +10% all (up to 30–40% cultivated). **Spore: +10% physical strength, period — the only beast granting no base power.** + +### Ranking +- **Iron → Bronze (1–2) → Silver (1–3) → Gold → Platinum.** +- **Premature maturation:** an Iron beast accumulating ~1,000 development points *undirected* matures permanently and can't evolve (this is what happened to Ren's parents' plants). +- **Correct cultivation:** exactly 100 directed points (right crystal/timing/sealing) per rank. All real methods are 100 days; "150-day" methods waste 50 days miscalibrating. +- **Caste maps to rank:** Iron = labor/poverty; Bronze = working class; Silver = privilege; Gold = elite (5 city families); Platinum = the King only. Rank gates jobs, districts, business (Bronze min for city commerce). + +### Ren's knowledge system +- After completing the ancient three-ingredient medicine (male plant + female plant + host born with the first half), Ren gained encyclopedic beast biology/ecology/cultivation/weakness knowledge — **clear up to Silver 3**; Gold+ and abyssals are a total void. +- Manifests as: seeing cultivation defects, correct evolution paths (contradicting records), invisible mana patterns, predator/prey ecology, behavioral signals. +- Carried through the hair-mushrooms; "always on" while fused. Expelling the spore would lose the stream — why he refuses to hide it. Mushrooms remain **cosmetic/"dormant" through ch 100** (ep 77, ep 90). Ren *speculates* evolving the spore may raise the ceiling — unconfirmed. + +### The 1,000-day method (parents) +- "Mature" plants are an intermediate cocoon. True maturation = 1,000 specific development points, **one per day with zero failures** (one miss resets to zero), via a 3-part daily ritual (dawn crystal + vital essence; 24 min midday sun; sunset seal with Night-Flower pollen), then a final-day **Vitality Rune** (~10,000 crystals each). Result: Bronze-2-level power, vitality 40%→100%, decades more life — would cure the father. Nobody discovers it because everyone quits before results show. + +### Ren's spore cultivation (ch 100 state) +- Spore→Bronze: 100 days absorbing specially processed Bronze crystals (discarded Bronze tissue + moss + crushed poisonous fungi + deep-earth seal), final day = the golden ancestral fungus. Each session routes lethal mana via a modified Shadow Stalker tentacle — daily ordeal, not montage. ~12/100 days done. +- **Intelligence Rune** charging over 10 days (enhances spore info-processing on the final day). +- **Incorrect-maturation tracker:** ~82/1,000 points from deep-mine mana exposure (margin remaining, can't be reckless). +- **Mirror-Mantis core:** suspended in the 300m geyser, needs ~100,000 mana to revive → planned second beast. +- **Diamond-Hydra egg** + **Hunter-Bug egg:** both stolen from the vein chamber. (The egg is identified as a *diamond* hydra, ep 90/92 — rarer than gold.) +- **Second beasts** are real but rare (only the King + ~12 legendary warriors). Reaching Bronze with the spore opens the possibility — the source of Ren's plan. + +### Academy structure & economy +- **5 teaching units:** (1) Basic Knowledge [history/economics/life]; (2) Cultivation Theory [Wei]; (3) Exterior Gathering [Zhao expeditions]; (4) Practical Crystals [Song mine work]; (5) Combat [Yang + Lin]. +- **Support ladder:** pass all 5 → Iron→Bronze support (1 → 10 crystals/day). Fail 3 units = −1 point; −3 points = expelled from support. Silver support = 100/day. +- **Gathering duplication:** the Academy matches the value of everything a student gathers/processes themselves (gov subsidy). Ren's primary wealth engine. Belongings are logged at intake so only self-earned gains count. +- **Gray Wing:** low-potential dorm; room 15 = Ren, Taro, Min, Liu — sited near the East Cave mines (poor students mine more). Iron dining hall is deliberately bland as a rank-up incentive. +- **Practice mines:** 4 cave systems under the Academy. Safe to 100m; guarded to 150m; dangerous past 200m (greater/fused worms); Bronze ecosystem past 275m (Living Tunnels, Deep Assassins); 300m = mana vein, geyser, crystal chamber, hydra lair. + +### Broader world & geopolitics +- **Yano** (Ren's kingdom): one Platinum tamer (the King, a double tamer, currently absent), 5 Gold families. City sits in a mana-poor zone that repels strong beasts — humanity's only natural defense. +- **Yino** (rival, across the dead abyss): developed **abyssal beast fusion** — tamers bear two beasts (one normal + one abyssal), with **triple-tamer tech "almost ready."** Grotesque but multiplies power and out-produces Gold-rank tamers; Yano considers it an abomination. Runs active espionage. +- **The Abyss:** two perpendicular chasms split the world into four quarters. **Dead abyss** (dry, between Yano/Yino); **living abyss** (a river of pure mana where eggs originate, dragon-guarded). 90% of each quarter belongs to dragons; humans hold a despised mana-poor circle. +- **Dragons:** apex "mother" of each evolutionary line. Decay (Ren's line: fungi/spores/decomposition), Red (fire/reptiles), Blue (marine), Green (forest/plants), White (sky), Black (night/shadow), Articulated (insects/exoskeletons). Mostly theoretical to common people. +- **Depth = danger:** every ~50m roughly doubles mana. 100m ≈ iron-ring; 200m greater/fused worms; 275m Bronze beasts; 300m+ gold-tier hydra territory; 1,000m+ silver hydras; deeper still toward diamond hydras. +- **Beast-core cycle:** Deep Assassins collect prey cores; as they ascend/evolve they discard cores into the depths, which "rebirth" as eggs ascending through mana zones — most become Living Tunnels/Deep Assassins; a rare few reach the surface veins unevolved and become the eggs the kingdom sells. + +### Mechanics governing Pokémon-NO and fusion-YES (faithfulness anchors) +- Humans fight using their **own fused beast(s)**; beasts are not sent out to duel each other. The "battles" are tamer-vs-tamer / tamer-vs-wild-beast. +- The spore is **fused into Ren's body** (hair-mushrooms), not a detachable companion. It has no name, no agency, and no personality — it cannot act as a "stakes character" or do anything on its own. Any "Cloud" doing things in a script is a fabrication. +- The Yino "fusion" is a *human* tamer absorbing/merging additional beasts (incl. corpses) into a grotesque double/triple-tamer hybrid — a horror of human ambition, not a creature evolution. Adrian's ch 66–67 "complete fusion" is the canonical example. + +--- + +## Conspiracy layer (ch 100 state) +- **Luna, Larissa, Liora** = three cousins undercover at the Academy. Luna = King's niece; Larissa = the princess. Handmaidens are spy-trainees; they signal via disguised mana gestures. Only the Director knows. The enemy kingdom has already ID'd four of six targets (Klein's clique hides poorly). +- **First Minister Silvercliff** = the Yano traitor who funded the expedition attack to capture Luna/Klein's group as hostages. Zhao investigates. +- **The Yino mine agent** is alive, hostile, and hunting the unknown egg-thief (Ren). The spy girl reported Ren's descent to the Director; Lin overheard and now suspects Ren. + +--- + +## IM sources by arc (type · tier) +- **Hook (Ch 1–5):** gray egg→spore *(Status Destruction T1)* · mushrooms sprout / "He's rotting!" *(Public Humiliation T1)* · parents' hope dies, "My little tamer" *(Emotional Devastation T1)* · untouched feast *(Family Sacrifice T1)* · decision to enter the forest *(Desperate Agency T2)*. +- **Forest (Ch 6–12):** Moon Toads, mushroom-glow accident *(Spore-as-accidental-savior T2)* · Mirror Mantis chase *(Survival Horror T2)* · ancient spores consume the Mantis, "They're not symbols. They're spores." *(World-Shift T1)* · female plant + transformation, knowledge floods in *(Power Awakening T1)* · parents searching, reunion, "We always have been [proud]" *(Unconditional Love T1)*. +- **Promise (Ch 13–14):** seeing the parents' wasted plants *(Knowledge-as-gift T2)* · the 1,000-day promise, faith-against-evidence *(T1)*. +- **Academy establish (Ch 15–24):** carriage bullying / Luna intervenes *(Status Inversion T2)* · Wei's public humiliation *(Institutional Injustice T1)* · Wei bet *(All-or-Nothing T1)* · Ren vs Kai scale-collapse *(Knowledge Defeats Power T1)* · Lin's training offer *(Unlikely Mentorship T2)*. +- **Mining/economy (Ch 26–43):** mining precision *(Competence T2)* · worm-explosion heist *(Magnificent Bastard T2)* · Taro's first absorption *(Proof-of-Knowledge T2)*. +- **Expedition (Ch 44–71):** Stone Lurker rope-kill *(Teamwork T2)* · Shadow Stalker solo skin-heist *(T1)* · tent siege, hostage demand for Luna/Klein *(Hostage Crisis T1)* · Zhao vs Adrian mirror-illusion kill *(Magnificent Deception T1)* · Ren's mirror-plate illusion fooling abyssal warriors *(Knowledge-as-Combat T1)*. +- **Deep mines (Ch 74–100):** 300m descent *(Survival T1)* · two eggs in the geyser, diamond-hydra reveal *(Discovery+Theft T1)* · hydra chase to surface, frozen slope *(Chase T1)* · Director vs Yino agent, "triple tamers… ready" *(Power Ceiling / Geopolitical T2)*. + +--- + +## Flavor notes +- **The ceremony is the injustice engine** — egg color is purchased economic sorting; the laughter is a rigged system working as designed. +- **Cooking metaphors are load-bearing** — the father explains cultivation as bread fermentation; food-as-love runs through every emotional beat (the uneaten feast, the bland cafeteria, Lin force-feeding Ren). +- **Mushrooms = asset and stigma at once** — they carry the knowledge, light the dark, mimic glows to save him; they also make him "Rotting Boy." Every benefit is packaged with social punishment. +- **Knowledge-vs-proof is the unique engine** — Ren *knows* but can't prove without sounding insane, so every win requires an indirect demonstration. An information-asymmetry thriller in cultivation-academy clothing, not a power fantasy. +- **The economy is explicit and calculable** — the show tracks crystal sums precisely (house = ~500k; spore evolution ~50k; rune ~10k each; ~105k earned in two months; "ten million" for a city house). The math creates urgency. +- **The mines are a vertical open world** — every ~50m is a new biome; the show escalates by descending. 0–300m mapped by ch 100; the deepest hydra tiers are the long-term ceiling. +- **Lin is the tonal thermostat** — comedy/discipline resets after each dark spike. + +--- + +## Relationship map (ch 100) +- **Ren ↔ Parents:** the foundation; everything repays their sacrifice. They follow the ritual on pure faith. Visits once a year. +- **Ren ↔ Luna:** mutual surveillance → reluctant investment. She reads his lies; he reads her mana. The roommate-misunderstanding scene is the comic/emotional turn. He doesn't know she's royalty. +- **Ren ↔ Lin:** brutal-warm mentorship; she sees her ruined-beast self in his ruined spore. Now suspects his mine secrets. +- **Ren ↔ Zhao:** patron-protégé; first authority endorsement (the "promising" letter). Now absent on the Silvercliff conspiracy. +- **Ren ↔ Wei:** pure antagonism; the bet will be Ren's first public vindication. +- **Ren ↔ Taro/Min/Liu:** genuine squad; Taro risks his beetle on Ren's method. +- **Ren ↔ Jin's group:** persistent harassment Ren increasingly exploits. +- **Luna ↔ Larissa ↔ Liora:** secret cousins / royal spy cell. +- **Yino agent ↔ Ren:** active unresolved threat — the agent hunts the unknown egg-thief. diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_zw.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_zw.md new file mode 100644 index 0000000..27834b5 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_zw.md @@ -0,0 +1,123 @@ +# ZW — Zompirewolf — Series Worlds Entry + +> **Opening anchor:** first 5 min / first 5 eps / first 20 eps. **Source verified through:** ch 100. +> Later material is reachable — **tease, don't anchor.** Deep reference: `world_zw_deep.md`. +> Status: DRAFT (source-built) · Confidence: High — eps 1–20 read closely (verbatim); 20–100 sampled for threads, limits, and entry map. + +> **How this file is read.** Layer 0 is the only default load (W2/W3/W4/W5). Layer 1 loads at W1 and the canon gate. Layer 2 loads at W1 (threads) and the canon gate (limits). Layer 3 lives in the companion. Build top-down; keep the top fast. + +--- + +# LAYER 0 — ESSENCE · *the only default load* + +## Three Pillars (locked) +> Verbatim from `three_pillars.md`. Pillar tagged **(Thruline)** is the Relatable Thruline source (W2). + +1. **Zompirewolf power system (triple hybrid)** +2. **Revenge for Parents** *(Thruline)* +3. **Faction Politics / Monster Kingdoms** + +## Protagonist — Tristan Walden +**Identity.** A 16-year-old raised as livestock in a Lycan enclosure, marked at 12 to become a werewolf the day his parents were taken as monster tribute. Escaping to join the resistance, he's bitten by a zombie, saved by an unknown figure — system error, no such class. Days later the Mistress's werewolf bite stacks a third gene set; it resolves into a **Grade F Zompirewolf — the first of its kind.** A nobody slave is now the most unclassifiable thing alive, hiding it to survive long enough for revenge. Engine fit: **Secret Identity / Hidden Strength + Injustice Engine.** +**Combat.** Reads opponents before he strikes (Perception/Reflex), slows their attacks (Battle Tactics), wins by outsmarting — surrenders a duel on purpose, turns rules against rule-makers. Physically outmatched through the opening; his edge is cold tactics and a body no one can read. +**Power Source.** Three gene sets (Zombie/Vampire/Werewolf) run at once, each leveled by a feeding act: drink blood, eat flesh, kill. A status plate only he sees; Julian hacked it so others see a plain werewolf. Limits: all three within 5 levels or the genes war for control (death); all three off at once = Deceased Human, real death; sun nerfs all stats. +**Voice.** Cold and flat, dry contempt underneath. Short declaratives when threatened; longer when genuinely surprised. He runs an internal kill counter — revenge is debt accounting, not rage. When people expect fear he gives indifference; that's the tell. His one warmth is his father's line, quoted before something reckless. + +**Voice Samples (verbatim — never paraphrase):** +1. "Why? Planning to rat me out for another promotion, you backstabber?" (Ep 1) — contempt, no heat +2. "Keep kissing their boots, you fools." (Ep 1) — defiance toward the complicit +3. "At this point, I don't even care what's happening to me. It's all just too much to handle!" / "Spoken like a true moron." (Ep 5) — overwhelm vs. the system's flat affect +4. "I give up." (Ep 16 — then judo-throws Donovan out of the arena) — weaponized compliance +5. "Life is either a daring adventure or nothing at all." (Ep 7 — his father's saying, quoted internally) — the one real thing he carries + +**Drift tripwires.** becomes hot-tempered | enjoys the hurting | softens toward the Mistress | turns the Julian/system bond into buddy-comedy | resolves his parents' fate | openly deploys vampire/undead genes in Lycan space | his interior adopts the oppressor's term for himself (livestock/cattle/mutt) — he rejects it, never owns it | his retorts get narrated instead of voiced (he speaks in confrontations). + +## Setting — Entry-Window World +**Feel.** A century after a three-point virus turned ~70% of humanity into Undead, Vampires, or Lycans by region, the survivors who couldn't flee Earth live as livestock — kept, fed, gifted, hunted under treaty. Not a rubble apocalypse: the rulers rebuilt cities, courts, economies, academies. The injustice is orderly. Tristan has a shower and a heater and is still a slave, watching the others celebrate the walls. + +**Sensory Samples (verbatim):** +1. "Location. Earth. Year. Thirty-one hundred. Designation. Lost Cause." (Ep 1) +2. "The lycans were kind enough to give them shelter, food, and basic supplies, so they were much better off than people in the nearby Territories ruled by the undead and the cold ones." (Ep 1) +3. "In the distance, Tristan watched the others laughing and smiling... as if they couldn't see the walls surrounding them, or the guards standing on top of those thick walls, watching their every move." (Ep 1) + +**Drift tripwires.** generic zombie apocalypse (humanity is organized and subjugated, not scattered) | night creatures as the main threat (the politics are the prison) | erase the treaty (the king lets vampires hunt a few werewolves every six months — the load-bearing absurdity). + +## Tone Constraint +Cold dark comedy over institutional horror — the laugh is Tristan's flat contempt against polite, rule-bound cruelty. Failure mode: tip into fun power fantasy or gory splatter and the injustice stops landing — the kills read as action, not justice. + +--- + +# LAYER 1 — ACTIVATION CANON · *the opening anchor* + +## First 5 minutes *(the 50%-drop gate)* +Radio-voiced cold open: Earth, Year 3100, "Lost Cause" — the virus, the three monster races, humans as livestock under treaty, told fast. Then the central image: Tristan alone, watching the other captives celebrate the story of their own captivity, smashing his bowl, spitting that he's leaving for the resistance. The wound named: his parents taken four years ago, the day he was marked at 12 for killing a guard with a baton. + +## First 5 episodes *(the first sitting)* +The escape, bear trap, zombie bite, unknown rescuer (Ep 1–2). First system error (Zompire Hybrid). Seraphina's conversion ceremony stacks the werewolf gene; second error resolves to **Zompirewolf, Grade F** (Ep 3–4). Julian makes contact and lays the hard rules — genes within 5 levels, never all three off, always say "yellow," cover as a werewolf (Ep 5). Donovan grinds glass into his back (first skill, Pain Tolerance). The listener now knows the world, the secret, the system, the captor, the cover. + +## First 20 episodes *(texture band)* +Training in Seraphina's mansion (Maddencreek); the sabotaged-ghoul incident; the night vampire-hunt killing Level 10 hunters Elara and Felix, taking the **Wind Daggers**, discovering the Undead Rhapsody combo (Ep 6–13). The Donovan duel won by surrendering then throwing him out (Ep 15–16). Departure to **Contingent** with aide Sloane; the Academy entrance exam (a 9-zone survival trial) ending in first place and a triple-skill Golden Skill Page (Ep 17–24). Introduced but not yet load-bearing: the Director, the underground fight circuit, the noble bounty. + +## HARD BLOCKS *(opening-binding)* +1. **Tristan is NOT a werewolf — he is a Zompirewolf (tribrid).** The species doesn't exist; no character may confirm it. The Mistress believes him a gifted werewolf. Treating him as a normal werewolf breaks the premise. +2. **The blessing is black; he always says "yellow."** Black = immediate extraction/experimentation. Reveal the real color only as a controlled "secret cracks" tease. +3. **All three gene levels must stay within 5 of each other.** Exceeding the gap = gene warfare (agony, death) — this forces the covert night feeding. Power is never free. +4. **Deactivating all three traits at once = permanent death** (Deceased Human). Absolute limit, set by Julian in Ep 5. +5. **The Wind Daggers are stolen and traceable** to the Elara/Felix killings; secret night hunts only, never public. +6. **Julian cannot be summoned** — he only initiates, in life-threat. Part of "the Syndicate," nature withheld in the opening. Don't invent his backstory as anchor. +7. **Seraphina cannot be overpowered in the entry window.** Her aura alone incapacitates her own elite guards ("Extremely Dangerous"). Don't write Tristan close to beating her. +8. **Tristan's class is "Unassigned."** His tribrid nature breaks classification — no predictable ceiling. Don't assign him a class. + +## Entry map *(tease ok, anchor flags)* +- **The Academy / Contingent** — enters ~ep 17 (departure). Moderate entry cost (S-Rank/noble/commoner hierarchy). +- **Sloane (aide)** — enters ~ep 16–17. +- **The Director** (knows his real surname; later: betrayed his parents) — enters ~ep 18; betrayal reveal ~ep 65. +- **Chloe (secret professor mentor, telepath)** — enters ~ep 28–32. +- **Tessa Monroe / "Wren" (noble + underground champion)** — enters ~ep 29–30. +- **King Jonathan / royal alliance** — Tristan switches to the king ~ep 65 (parents reportedly alive). +- **The Syndicate = The Voidborn / Silas Kent inside Tristan** — reveal ~ep 96. **Anchor = break.** Tease only. + +## Engines the opening supports +1. **Secret Identity / Hidden Strength (UNTESTED):** the world's most dangerous creature wears the Mistress's collar; every scene runs on dramatic irony. +2. **Injustice Engine (UNTESTED):** the world itself is the injustice — humans as orderly property — over personal wrongs. +3. **Underdog Awakening (UNTESTED):** alone, no allies, one used bone whip — finishes first against nobles who brought mercenaries. + +## IM sources — opening window +- **The complicit captives** (Ep 1): humans cheer their own marking. *World, T1* +- **Parents taken as tribute** (Ep 1): dragged off, no one helped. *Personal, T1/T2* +- **Wyatt's betrayal** (Ep 1): father's best friend ratted them out for a promotion. *Personal, T2* +- **The glass shards** (Ep 5): Donovan, public, gratuitous. *Personal, T2* +- **The noble trap + bounty** (Ep 19–24): rigged exam, cursed trap, bounty on an S-Rank mutt. *Institutional, T3* + +**Injustice density** *(primary conversion driver):* +- **T1 (mandatory):** Year 3100 — humans as organized livestock, complicit in their captivity, one person refusing. +- **T2 (supporting):** the personal wrongs — parents taken, Wyatt's betrayal, the glass shards. +- **T3 (deepening):** the rigged ladder — even after legitimate S-Rank, a bounty and a Level 22 brawler are aimed at him. +- **Drift risk:** if the injustice doesn't land before the awakening, the kills read as action, not justice — feel what he felt before what he does about it. + +--- + +# LAYER 2 — RAILS (eps ~20–100) + +## 2a · Conversion Threads +1. **Are his parents alive?** — initiates Ep 1, reframed ~ep 65 (the king says they may be alive, location withheld). The emotional engine. Never deliver. +2. **The Director knows his real surname — and betrayed his parents.** — seeded ~ep 18, named ~ep 65. Who is she, and what does she want with him? +3. **The secret cracking.** — runs the whole arc: the Mistress's all-seeing eye, the Director's scanner anomaly. The day they learn what he is, everything changes. +4. **What is the Syndicate?** — teased Ep 5, paid ~ep 96 (The Voidborn; Silas Kent living inside him). Tease the question only; the answer lives deep. +5. **Seraphina's plan to use him against the king** — seeded Ep 4 ("my new sword, to tear the king's family apart"). He is playing her while she thinks she owns him. + +## 2b · Canon Limits / Never-Happens +- **The show never lets Tristan use his power freely** — every vampire/undead level costs a risky secret feeding; balance rule is permanent. +- **The show never resolves the parents on-screen** — they are reported, never shown; status stays a question through ch 100. +- **The show never writes Seraphina as romance** — the dynamic is possession and predation; he keeps a kill counter with her name on it. +- **The show never makes Julian a reliable ally** — he initiates only, has his own revenge, and withholds clearance-gated truth. + +--- + +# LAYER 3 → companion: `world_zw_deep.md` · *on demand only* + +> Full cast · full gene/skill mechanics · geography/economy · late-game arcs (King, Guild, Voidborn) · relationship maps · flavor. Pulled only on a canon question, a W2 break-check, or a W5 deep-dive. + +--- + +**Cross-show contamination:** checked against the `series_worlds.md` index — clean (no Tristan/Seraphina/Julian/Donovan/Sloane/Chloe/Tessa/Wren/Wyatt collisions with active docs). diff --git a/bte-promo-script/repos/bte-promo-script-repo/world docs/world_zw_deep.md b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_zw_deep.md new file mode 100644 index 0000000..eb694a6 --- /dev/null +++ b/bte-promo-script/repos/bte-promo-script-repo/world docs/world_zw_deep.md @@ -0,0 +1,96 @@ +# ZW — Zompirewolf — Layer 3 Deep Reference (companion) + +> On-demand only. Not in the default build path. Pulled for a canon question, a W2 break-check, or a W5 deep-dive. Reference-formatted; not narrative. Source verified through ch 100; eps 1–20 close, 20–100 sampled. + +> **L3 note:** the working doc (`world_zw.md`, Layers 0–2) is the only file W1–W5 load by default. This companion holds everything that isn't an opening constraint, a thread, or a limit. + +--- + +## Cast + +| Character | Type | Role | Relationship to Tristan | Entry | Anchor-safe? | Key detail | +|---|---|---|---|---|---|---| +| **Tristan Walden** | Zompirewolf (secret) | Protagonist | self | Ep 1 | YES | 5'6" at start (grows). Brown skin, faint freckles, elbow-length white hair, crimson eyes (hidden as werewolf). Former enclosure livestock. World's first Zompirewolf. | +| **Seraphina ("The Mistress")** | Alpha Werewolf | Primary antagonist (personal) | captor/possessor; plans to use him vs. the king | Ep 1 | YES | Ruby-red eyes, blonde, brown skin. Illegitimate, most-gifted child of the Lycan King; bent on tormenting the royal family. Alpha-female visual pheromone enthralls males 16+. Full power hidden; aura incapacitates her own guards. *(Vampires call the king's daughter "Natalia" in Ep 10 — alias or rival reference, unconfirmed; surname NOT given in source.)* | +| **Julian Ramsey** | Voidborn admin (Syndicate) | hidden wild-card | assigned administrator; own revenge | Ep 5 (text/voice only) | YES | Cannot be summoned — only initiates. Of the second Voidborn faction (help humans peacefully). Friend of Silas Kent. | +| **Donovan Reed** | Werewolf | antagonist (jealousy) | Seraphina's first mate; sees Tristan as romantic rival | Ep 3 | YES | 6'1", caramel skin, ponytail + beaded beard, two swords. Second-strongest werewolf in the city. Bested via judo throw Ep 16. | +| **Wyatt Dawson** | Human (voluntary guard captain) | antagonist (betrayer) | his father's closest friend; betrayed him | Ep 1 | YES | 6', dark skin, large pointed ears, goatee, nose scar; lycan slave-mark tattoo on palm. On the kill list since childhood. | +| **Sloane Crawford** | Turned werewolf (ex-human) | reluctant ally / watcher | Seraphina's aide, accompanies him to the Academy | Ep 16–17 | YES | Blonde; former human like Tristan, hence the rapport. | +| **The Director** | First-gen Werewolf | institutional authority / observer | knows his real surname; later: betrayed his parents | Ep 18 | YES (caution) | Warm-seeming, ~century old, burn scar earlobe-to-chin. Absolute authority in Contingent. Her interest in Tristan is not benign; her parent-betrayal is named ~ep 65. | +| **Chloe** | Secret (professor) | covert mentor / telepath | genuine ally | Ep 28–32 | CAUTION (late) | Professor of Archaeology & Artifacts; telepath (holds verbal + mental talk at once). Her own father betrayed her mother to vampires. | +| **Tessa Monroe / "Wren Aldridge"** | Werewolf noble | potential ally | first to approach without hostility | Ep 29–30 | CAUTION (late) | S-Ranker noble who is also the undefeated underground champion "Wren." | +| **Samantha Wright** | Werewolf | combat professor | evaluator | Ep 35–39 | CAUTION (Academy) | Power of giantification; weaponized flaming-red hair. Not corruptible by nobles. | +| **King Jonathan** | Lycan King | late patron | takes guardianship ~ep 65; offers parents' location | ~Ep 57–65 | NO (deep) | Tristan plays both sides — "on my own side." Wants Tristan to clear the swamps. | +| **Tristan's parents** | Human | emotional engine | taken as tribute when he was 12 | Ep 1 (memory) | YES (offscreen) | Reportedly founding members of the resistance (~ep 65); king believes them alive; never shown. DO NOT resolve. | +| **Carlile Ross** | Werewolf | Academy antagonist | accepted a bounty on him | ~Ep 38 | CAUTION | Level 22 "Powerhouse" brawler; constrained by campus rules. | +| **Silas Kent** | Voidborn dissident | dormant second self | lives inside Tristan's body | reveal ~Ep 96 | NO (deep) | The lone Voidborn who fought the experiment; presumed dead; surfaces when Tristan is near death, taking control. | + +--- + +## The Blessing System (Zompirewolf mechanics) + +**Gene economy (one feeding act per gene):** +| Gene | Skill-point source | Constraint | +|---|---|---| +| Vampire | drink blood (rarer source = more points; monster blood counts) | sun nerfs all stats; dormant genes still react to UV | +| Zombie/Undead | eat flesh (rarer = more; monster flesh counts) | his rotten blood is poison to vampires — a weapon (triggers "The Coffin") | +| Werewolf | kill/defeat monsters | hardest points; the open "cover" gene | + +**Balance rule.** All active species levels stay within 5 of each other or the genes go out of sync and fight for control — "torn apart and reassembled," potentially lethal (Ep 5). Forces open werewolf training by day, covert blood/flesh feeding by night. + +**Deactivation.** One trait: painful but bearable. Two at once: ten-fold pain. All three: activates **Deceased Human** — real death (Ep 5). Vampire tells (pale skin, fangs, crimson eyes) persist even when deactivated and must be suppressed. + +**Status plate (what others see).** Julian's hack shows only: Werewolf, current level, Affiliation: Werewolves, Grade F. The Mistress's all-seeing eye found nothing; the Academy scanner pod flashed a self-correcting anomaly (possible future breach). + +**Grade ladder.** F → E → D → C → B → A → S → (unknown). Evolution is conditional, can fail into Devolution; ~5% of the population can evolve at all, and most never know without a costly oracle reading. + +**Blessing colors (rarity).** Yellow (common) · Red/Blue (rare, faction-sought) · Black (rarest; Tristan's true color — extraction risk). + +**Skills observed (entry window):** +- *Vampire:* Low-grade Perception (senses intentions; **Reflex** perk — adapts to enemy patterns), Blood Poison, Skill Absorption. +- *Werewolf:* Battle Tactics (perceived slow-motion dodging), **Enrage** (Director-flagged, among the five rarest), Pain Tolerance. +- *Zombie:* Corpse Parade (commands lower undead), Bleed Resistance, Poison Resistance. +- *Unique:* **Undead Rhapsody** — auto-activates when only zombie+vampire genes are on; stat boost + cold calm; ≤2 minutes or burnout (discovered Ep 11–12). +- *Title "Defiant":* +10% strength/defense vs. creatures 5+ levels above his highest gene, plus bonus EXP. + +**Weapons.** +- *Wind Daggers* (Rare): azure short swords from the Elara/Felix kill; 1.5× vs. night creatures, 2× vs. werewolves; hemorrhage effect; locked passive/active gated on A-grade kills. Secret/inventory only. +- *Bone Whip* (Uncommon): Academy entrance-exam reward; used openly. + +--- + +## Geography & economy + +- **Deja** — capital of the Lycan Kingdom; Seraphina's seat of unshakable power (uncrowned queen). +- **Maddencreek** — the city housing Seraphina's mansion; built around a dormant volcano (gothic skyscrapers, volcanic materials), ringed by a deadly mutant-beast forest. +- **Seraphina's Mansion** — ten ivory defensive towers, monster-bone walls, gold throne, onyx columns, teal carpet. +- **Contingent** — the Academy city atop a mysteriously warm mountain; >1M residents, multi-faction trade hub funded by multiple werewolf kingdoms plus vampire interests; multi-gate security; even Seraphina is barred from entering. +- **The Academy** — elite Lycan military program; ~12 buildings (first-years access 7); S/A/B/C/D ranking from the entrance exam; Subjugation Quest at the three-month mark; absolute rule of the Director. +- **The Aurora Continent / Five Stars** — Lycania is one of five prosperous-but-constrained "stars": sea on three sides, night-creature swamp to the north blocking expansion. +- **Currency:** White → Red (×100) → Blue (×100) → Silver (×1,000 Blue) → Gold → Black (no known holder). +- **Treaty:** the three great lords' 50-year pact; each region hosts two embassies for the other factions; vampires may hunt a few werewolves every six months (humans gifted as consolation). + +--- + +## Late-game arcs (sampled, deep — anchor = break) + +- **Academy life & the arena killings (~ep 34–50):** Tristan kills Miles and, during a later in-Academy exam, three noble students; the Director covers for him, blaming the resistance, and confronts him ("She Knows," Ep 35). Bounty placed by noble families. +- **The King turn (~ep 57–65):** King Jonathan takes Tristan's guardianship from Seraphina; reveals his parents were founding resistance members and may be alive; sets the Guild-rank deal (reach Gold in two months) and the long goal of clearing the swamps. Tristan plays both sides. +- **The Guild (~ep 67+):** adventurer ranks Copper→Diamond, each with E–S subdivisions; only five Diamond adventurers exist. +- **The Voidborn reveal (~ep 96):** the "admins"/Syndicate are **The Voidborn**, who engineered the virus as a forced-evolution experiment (human abductions 1947–~2000s). Julian's faction wanted to help humanity peacefully. **Silas Kent** — the lone dissenter, presumed dead — lives inside Tristan, surfacing near death. Other admins would kill Tristan to kill Silas. +- **Ep 100:** Tristan openly activates all three genes and a wolf-summon ("Valhalla") in combat, exposing his tribrid nature to enemies. + +--- + +## Open canon questions (for future episodes) +1. Where exactly are his parents, and will he reach them? +2. Full nature of the Director's betrayal and her intent. +3. When/how does Seraphina learn what he is? +4. Silas Kent's agenda and how the two selves coexist. +5. Tristan's power ceiling and what Zompirewolf evolution unlocks. +6. The first Subjugation Quest / the swamps. +7. Chloe's full secret. + +--- + +**File status:** DRAFT (source-built). Voice/Sensory samples verbatim with episode numbers. Mechanics and hard limits drawn from explicit source rules. Post-ep 25 material sampled, not exhaustively read — verify specific beats before scripting deep arcs. diff --git a/bte-promo-script/secrets.env.example b/bte-promo-script/secrets.env.example new file mode 100644 index 0000000..921db43 --- /dev/null +++ b/bte-promo-script/secrets.env.example @@ -0,0 +1,8 @@ +# Copy to secrets.env (gitignored). Applied to K8s once via deploy/apply-secrets.sh. +# Pods read these from secrets — not from this file at runtime. +# +# MADEYE_BASE_URL is not a secret — host only (no /v1); set on madeye-proxy Deployment env +# (see .env.example and deploy/madeye-proxy.yaml). + +GENAXIS_API_KEY=replace-with-genaxis-api-key +MADEYE_API_KEY=replace-with-madeye-bearer-token diff --git a/bte-promo-script/tools/README.md b/bte-promo-script/tools/README.md new file mode 100644 index 0000000..9af0d41 --- /dev/null +++ b/bte-promo-script/tools/README.md @@ -0,0 +1,9 @@ +# BTE polecat tools + +CLI tools baked into the `polecat-agent` image and run by Claude inside polecat pods. + +| Tool | Path | Binary | +|------|------|--------| +| promo-finish | `tools/finish/` | `/usr/local/bin/promo-finish` | + +Add new tools here as sibling directories; wire each into `images/polecat-agent/Dockerfile`. diff --git a/bte-promo-script/tools/finish/client.go b/bte-promo-script/tools/finish/client.go new file mode 100644 index 0000000..7b2a62e --- /dev/null +++ b/bte-promo-script/tools/finish/client.go @@ -0,0 +1,97 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "strings" + "time" +) + +type apiClient struct { + base string + client *http.Client +} + +func newAPIClient(baseURL string) *apiClient { + return &apiClient{ + base: strings.TrimRight(baseURL, "/"), + client: &http.Client{Timeout: 30 * time.Second}, + } +} + +type artifact struct { + Key string `json:"key"` + FilePath string `json:"file_path"` + FileURL string `json:"file_url"` + S3URI string `json:"s3_uri"` + S3Key string `json:"s3_key"` +} + +type uploadResult struct { + JobName string `json:"job_name"` + RequestID string `json:"request_id"` + Artifacts []artifact `json:"artifacts"` +} + +type webhookInput struct { + RequestID string `json:"request_id"` + Artifacts []artifact `json:"artifacts"` +} + +func (c *apiClient) upload(jobName string, body any) (uploadResult, error) { + var out uploadResult + err := c.postJSON(fmt.Sprintf("/v1/promo/jobs/%s/upload", jobName), body, &out) + return out, err +} + +func (c *apiClient) webhook(jobName string, body webhookInput) error { + path := fmt.Sprintf("/v1/promo/jobs/%s/webhook", jobName) + url := c.base + path + fmt.Fprintf(os.Stderr, "promo-finish: calling promo-api POST %s\n", url) + fmt.Fprintf(os.Stderr, "promo-finish: promo-api will emit GenAxis webhook type=PROMO_SCRIPT_COMPLETED request_id=%s\n", + body.RequestID) + + var respBody map[string]any + if err := c.postJSON(path, body, &respBody); err != nil { + return err + } + fmt.Fprintf(os.Stderr, "promo-finish: promo-api accepted handoff → GenAxis COMPLETED webhook sent (check promo-api logs)\n") + if msg, _ := respBody["message"].(string); msg != "" { + fmt.Fprintf(os.Stderr, "promo-finish: promo-api response: %s\n", msg) + } + return nil +} + +func (c *apiClient) postJSON(path string, body any, out any) error { + raw, err := json.Marshal(body) + if err != nil { + return fmt.Errorf("marshal: %w", err) + } + + req, err := http.NewRequest(http.MethodPost, c.base+path, bytes.NewReader(raw)) + if err != nil { + return fmt.Errorf("request: %w", err) + } + req.Header.Set("Content-Type", "application/json") + + resp, err := c.client.Do(req) + if err != nil { + return fmt.Errorf("post %s: %w", path, err) + } + defer resp.Body.Close() + + respBody, _ := io.ReadAll(io.LimitReader(resp.Body, 65536)) + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return fmt.Errorf("HTTP %d: %s", resp.StatusCode, strings.TrimSpace(string(respBody))) + } + if out != nil && len(respBody) > 0 { + if err := json.Unmarshal(respBody, out); err != nil { + return fmt.Errorf("decode response: %w", err) + } + } + return nil +} diff --git a/bte-promo-script/tools/finish/dev_output.go b/bte-promo-script/tools/finish/dev_output.go new file mode 100644 index 0000000..5ade315 --- /dev/null +++ b/bte-promo-script/tools/finish/dev_output.go @@ -0,0 +1,67 @@ +package main + +import ( + "fmt" + "io" + "os" + "path/filepath" + "strings" +) + +// copyDevOutput saves the W4 script file to a host-mounted directory for local testing. +// LOCAL TEST ONLY — remove before push (see DefaultDevOutputHostPath in promo-api defaults.go). +// Never fails finish/webhook — logs a warning on permission or copy errors. +func copyDevOutput(_ string, labeled []labeledFile) { + base := strings.TrimSpace(os.Getenv("PROMO_DEV_OUTPUT_DIR")) + if base == "" { + return + } + + var scriptPath string + for _, lf := range labeled { + if lf.Key == "script" { + scriptPath = lf.Path + break + } + } + if scriptPath == "" { + fmt.Fprintf(os.Stderr, "promo-finish dev-output: skip (no script artifact in handoff)\n") + return + } + + src, err := filepath.Abs(scriptPath) + if err != nil { + fmt.Fprintf(os.Stderr, "promo-finish dev-output: WARN resolve script path: %v\n", err) + return + } + dst := filepath.Join(base, filepath.Base(src)) + + if err := copyFile(src, dst); err != nil { + fmt.Fprintf(os.Stderr, "promo-finish dev-output: WARN could not save script to %s: %v\n", dst, err) + fmt.Fprintf(os.Stderr, "promo-finish dev-output: fix: chmod 777 %s on the Docker Desktop host\n", base) + return + } + fmt.Fprintf(os.Stderr, "promo-finish dev-output: W4 script saved => %s\n", dst) +} + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + + if err := os.MkdirAll(filepath.Dir(dst), 0o777); err != nil { + return err + } + out, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o666) + if err != nil { + return err + } + defer out.Close() + + if _, err := io.Copy(out, in); err != nil { + return err + } + return out.Close() +} diff --git a/bte-promo-script/tools/finish/dev_output_test.go b/bte-promo-script/tools/finish/dev_output_test.go new file mode 100644 index 0000000..0f55186 --- /dev/null +++ b/bte-promo-script/tools/finish/dev_output_test.go @@ -0,0 +1,43 @@ +package main + +import ( + "os" + "path/filepath" + "testing" +) + +func TestCopyDevOutputScriptOnly(t *testing.T) { + tmp := t.TempDir() + host := filepath.Join(tmp, "bte-script") + if err := os.MkdirAll(host, 0o777); err != nil { + t.Fatal(err) + } + t.Setenv("PROMO_DEV_OUTPUT_DIR", host) + + src := filepath.Join(tmp, "RBM_Betrayal_v1.md") + if err := os.WriteFile(src, []byte("# script"), 0o644); err != nil { + t.Fatal(err) + } + + copyDevOutput("job-1", []labeledFile{ + {Key: "map", Path: filepath.Join(tmp, "map.md")}, + {Key: "script", Path: src}, + }) + + dst := filepath.Join(host, "RBM_Betrayal_v1.md") + data, err := os.ReadFile(dst) + if err != nil { + t.Fatalf("script not copied: %v", err) + } + if string(data) != "# script" { + t.Fatalf("unexpected content: %q", data) + } + if _, err := os.Stat(filepath.Join(host, "job-1")); err == nil { + t.Fatal("should not create job subdir") + } +} + +func TestCopyDevOutputDisabled(t *testing.T) { + t.Setenv("PROMO_DEV_OUTPUT_DIR", "") + copyDevOutput("job-1", nil) +} diff --git a/bte-promo-script/tools/finish/env.go b/bte-promo-script/tools/finish/env.go new file mode 100644 index 0000000..c9bae2c --- /dev/null +++ b/bte-promo-script/tools/finish/env.go @@ -0,0 +1,35 @@ +package main + +import ( + "fmt" + "os" + "strings" +) + +type jobEnv struct { + APIURL string + JobName string + RequestID string +} + +func loadJobEnv() (jobEnv, error) { + e := jobEnv{ + APIURL: strings.TrimRight(envOr("PROMO_API_URL", "http://promo-api.bte-gastown.svc:8080"), "/"), + JobName: os.Getenv("PROMO_JOB_NAME"), + RequestID: os.Getenv("GENAXIS_REQUEST_ID"), + } + if e.JobName == "" { + return e, fmt.Errorf("PROMO_JOB_NAME is required") + } + if e.RequestID == "" { + return e, fmt.Errorf("GENAXIS_REQUEST_ID is required") + } + return e, nil +} + +func envOr(k, def string) string { + if v := os.Getenv(k); v != "" { + return v + } + return def +} diff --git a/bte-promo-script/tools/finish/finish.go b/bte-promo-script/tools/finish/finish.go new file mode 100644 index 0000000..8410a5b --- /dev/null +++ b/bte-promo-script/tools/finish/finish.go @@ -0,0 +1,43 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" +) + +func runFinish(args ...string) error { + env, err := loadJobEnv() + if err != nil { + return err + } + fmt.Fprintf(os.Stderr, "promo-finish finish: job=%s request_id=%s api=%s\n", + env.JobName, env.RequestID, env.APIURL) + + labeled, err := parseFileArgs(args) + if err != nil { + return err + } + for _, lf := range labeled { + fmt.Fprintf(os.Stderr, "promo-finish finish: artifact key=%q path=%q\n", lf.Key, lf.Path) + } + + fmt.Fprintf(os.Stderr, "promo-finish finish: step 1/2 upload → promo-api\n") + result, err := doUpload(labeled) + if err != nil { + return err + } + + raw, err := json.Marshal(result) + if err != nil { + return err + } + + fmt.Fprintf(os.Stderr, "promo-finish finish: step 2/2 webhook → promo-api → GenAxis PROMO_SCRIPT_COMPLETED\n") + if err := runWebhook(string(raw)); err != nil { + return err + } + + copyDevOutput(env.JobName, labeled) + return nil +} diff --git a/bte-promo-script/tools/finish/main.go b/bte-promo-script/tools/finish/main.go new file mode 100644 index 0000000..acd0518 --- /dev/null +++ b/bte-promo-script/tools/finish/main.go @@ -0,0 +1,77 @@ +// Command promo-finish is the orchestrator tool installed on polecat-agent. +// Claude runs these subcommands — never GenAxis/S3 HTTP directly. +// +// promo-finish upload key=path [key=path ...] → stdout: { artifacts: [{key, file_url, …}] } +// promo-finish webhook '' → one GenAxis completed webhook +// promo-finish finish key=path [key=path ...] → upload all + webhook once +package main + +import ( + "fmt" + "os" +) + +func main() { + if len(os.Args) < 2 { + usage() + os.Exit(2) + } + + var err error + switch os.Args[1] { + case "upload": + if len(os.Args) < 3 { + usage() + os.Exit(2) + } + err = runUpload(os.Args[2:]...) + case "webhook": + if len(os.Args) != 3 { + usage() + os.Exit(2) + } + err = runWebhook(os.Args[2]) + case "finish": + if len(os.Args) < 3 { + usage() + os.Exit(2) + } + err = runFinish(os.Args[2:]...) + case "-h", "--help", "help": + usage() + return + default: + usage() + os.Exit(2) + } + + if err != nil { + fmt.Fprintf(os.Stderr, "promo-finish: %v\n", err) + os.Exit(1) + } + fmt.Fprintln(os.Stderr, "PROMO_FINISH_OK") +} + +func usage() { + fmt.Fprintf(os.Stderr, `promo-finish — orchestrator handoff tool (runs on Polecat) + +Env (set by operator): PROMO_API_URL, PROMO_JOB_NAME, GENAXIS_REQUEST_ID + +Commands: + upload key=path [key=path ...] Upload labeled outputs → stdout JSON { artifacts: [...] } + webhook '' One backend webhook with all script URLs + finish key=path [key=path ...] upload + webhook in one step + +Keys must match repos/bte-promo-script-repo/scripts/PROMO_FINISH.md (which step produced which file). + +Example: + RESULT=$(promo-finish upload \ + script=output/script.md \ + metadata=output/metadata.json \ + beats=output/beats.json) + promo-finish webhook "$RESULT" + +One step: + promo-finish finish script=output/script.md metadata=output/metadata.json +`) +} diff --git a/bte-promo-script/tools/finish/parse.go b/bte-promo-script/tools/finish/parse.go new file mode 100644 index 0000000..a66ba18 --- /dev/null +++ b/bte-promo-script/tools/finish/parse.go @@ -0,0 +1,39 @@ +package main + +import ( + "fmt" + "strings" +) + +type labeledFile struct { + Key string + Path string +} + +// parseFileArgs turns CLI args "script=output/script.md metadata=output/meta.json" +// into labeled files. Keys are defined by the static workflow (step → output name). +func parseFileArgs(args []string) ([]labeledFile, error) { + if len(args) == 0 { + return nil, fmt.Errorf("at least one key=path argument is required") + } + + out := make([]labeledFile, 0, len(args)) + seen := make(map[string]struct{}, len(args)) + for _, arg := range args { + key, path, ok := strings.Cut(arg, "=") + if !ok { + return nil, fmt.Errorf("expected key=path, got %q (keys come from scripts/PROMO_FINISH.md)", arg) + } + key = strings.TrimSpace(key) + path = strings.TrimSpace(path) + if key == "" || path == "" { + return nil, fmt.Errorf("invalid key=path: %q", arg) + } + if _, dup := seen[key]; dup { + return nil, fmt.Errorf("duplicate key %q", key) + } + seen[key] = struct{}{} + out = append(out, labeledFile{Key: key, Path: path}) + } + return out, nil +} diff --git a/bte-promo-script/tools/finish/parse_test.go b/bte-promo-script/tools/finish/parse_test.go new file mode 100644 index 0000000..482840b --- /dev/null +++ b/bte-promo-script/tools/finish/parse_test.go @@ -0,0 +1,39 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestParseFileArgs(t *testing.T) { + t.Run("valid", func(t *testing.T) { + got, err := parseFileArgs([]string{ + "map=working files/map.md", + "script=output/script.md", + }) + require.NoError(t, err) + assert.Equal(t, []labeledFile{ + {Key: "map", Path: "working files/map.md"}, + {Key: "script", Path: "output/script.md"}, + }, got) + }) + + t.Run("missing equals", func(t *testing.T) { + _, err := parseFileArgs([]string{"script"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "key=path") + }) + + t.Run("duplicate key", func(t *testing.T) { + _, err := parseFileArgs([]string{"script=a.md", "script=b.md"}) + require.Error(t, err) + assert.Contains(t, err.Error(), "duplicate key") + }) + + t.Run("empty args", func(t *testing.T) { + _, err := parseFileArgs(nil) + require.Error(t, err) + }) +} diff --git a/bte-promo-script/tools/finish/upload.go b/bte-promo-script/tools/finish/upload.go new file mode 100644 index 0000000..a53e5d6 --- /dev/null +++ b/bte-promo-script/tools/finish/upload.go @@ -0,0 +1,75 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "path/filepath" +) + +type filePayload struct { + Key string `json:"key"` + FilePath string `json:"file_path"` + Script string `json:"script,omitempty"` +} + +func readLabeledFiles(labeled []labeledFile) ([]filePayload, error) { + files := make([]filePayload, 0, len(labeled)) + for _, lf := range labeled { + abs, err := filepath.Abs(lf.Path) + if err != nil { + return nil, fmt.Errorf("resolve path for key %q: %w", lf.Key, err) + } + if _, err := os.Stat(abs); err != nil { + return nil, fmt.Errorf("file for key %q not found: %s", lf.Key, abs) + } + fp := filePayload{Key: lf.Key, FilePath: abs} + if lf.Key == "script" { + raw, err := os.ReadFile(abs) + if err != nil { + return nil, fmt.Errorf("read script for upload: %w", err) + } + fp.Script = string(raw) + } + files = append(files, fp) + } + return files, nil +} + +func doUpload(labeled []labeledFile) (uploadResult, error) { + env, err := loadJobEnv() + if err != nil { + return uploadResult{}, err + } + + files, err := readLabeledFiles(labeled) + if err != nil { + return uploadResult{}, err + } + + fmt.Fprintf(os.Stderr, "promo-finish upload: job=%s request_id=%s files=%d\n", + env.JobName, env.RequestID, len(files)) + for _, f := range files { + fmt.Fprintf(os.Stderr, " - %s => %s\n", f.Key, f.FilePath) + } + + client := newAPIClient(env.APIURL) + return client.upload(env.JobName, map[string]any{ + "request_id": env.RequestID, + "files": files, + }) +} + +func runUpload(args ...string) error { + labeled, err := parseFileArgs(args) + if err != nil { + return err + } + result, err := doUpload(labeled) + if err != nil { + return err + } + enc := json.NewEncoder(os.Stdout) + enc.SetIndent("", " ") + return enc.Encode(result) +} diff --git a/bte-promo-script/tools/finish/webhook.go b/bte-promo-script/tools/finish/webhook.go new file mode 100644 index 0000000..65cb760 --- /dev/null +++ b/bte-promo-script/tools/finish/webhook.go @@ -0,0 +1,51 @@ +package main + +import ( + "encoding/json" + "fmt" + "os" + "strings" +) + +func runWebhook(inputJSON string) error { + env, err := loadJobEnv() + if err != nil { + return err + } + + inputJSON = strings.TrimSpace(inputJSON) + if inputJSON == "" { + return fmt.Errorf("upload result JSON is required (output of promo-finish upload)") + } + + var upload uploadResult + if err := json.Unmarshal([]byte(inputJSON), &upload); err != nil { + return fmt.Errorf("parse upload JSON: %w", err) + } + if len(upload.Artifacts) == 0 { + return fmt.Errorf("upload JSON must include artifacts[] from upload step") + } + for i, a := range upload.Artifacts { + if a.Key == "" { + return fmt.Errorf("artifacts[%d] must include key (from upload step)", i) + } + if a.FileURL == "" || a.S3Key == "" { + return fmt.Errorf("artifacts[%d] must include file_url and s3_key", i) + } + } + if upload.RequestID != "" && upload.RequestID != env.RequestID { + return fmt.Errorf("request_id mismatch: env=%s json=%s", env.RequestID, upload.RequestID) + } + + fmt.Fprintf(os.Stderr, "promo-finish webhook: job=%s request_id=%s artifacts=%d\n", + env.JobName, env.RequestID, len(upload.Artifacts)) + for _, a := range upload.Artifacts { + fmt.Fprintf(os.Stderr, " - %s => %s\n", a.Key, a.FileURL) + } + + client := newAPIClient(env.APIURL) + return client.webhook(env.JobName, webhookInput{ + RequestID: env.RequestID, + Artifacts: upload.Artifacts, + }) +} diff --git a/bte-promo-script/tools/sourcefetch/main.go b/bte-promo-script/tools/sourcefetch/main.go new file mode 100644 index 0000000..d4d8634 --- /dev/null +++ b/bte-promo-script/tools/sourcefetch/main.go @@ -0,0 +1,174 @@ +package main + +import ( + "archive/zip" + "encoding/json" + "encoding/xml" + "flag" + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "strings" + "time" +) + +func main() { + dest := flag.String("dest", "", "destination directory for extracted episode text files") + flag.Parse() + urls := flag.Args() + if *dest == "" { + fatal("dest is required") + } + if len(urls) == 0 { + if raw := strings.TrimSpace(os.Getenv("PROMO_SOURCE_DOCUMENTS")); raw != "" { + if err := json.Unmarshal([]byte(raw), &urls); err != nil { + fatal("PROMO_SOURCE_DOCUMENTS: %v", err) + } + } + } + if len(urls) == 0 { + fatal("at least one source document URL is required") + } + + if err := os.MkdirAll(*dest, 0o755); err != nil { + fatal("mkdir dest: %v", err) + } + + client := &http.Client{Timeout: 5 * time.Minute} + for i, rawURL := range urls { + rawURL = strings.TrimSpace(rawURL) + if rawURL == "" { + continue + } + name := fmt.Sprintf("ep%03d.txt", i+1) + outPath := filepath.Join(*dest, name) + if err := fetchAndExtract(client, rawURL, outPath); err != nil { + fatal("source %d (%s): %v", i+1, rawURL, err) + } + if (i+1)%10 == 0 || i+1 == len(urls) { + fmt.Fprintf(os.Stderr, "promo-source-fetch: progress %d/%d\n", i+1, len(urls)) + } + fmt.Fprintf(os.Stderr, "promo-source-fetch: saved %s <= %s\n", outPath, rawURL) + } +} + +func fetchAndExtract(client *http.Client, url, outPath string) error { + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + return err + } + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + body, _ := io.ReadAll(io.LimitReader(resp.Body, 512)) + return fmt.Errorf("HTTP %d: %s", resp.StatusCode, strings.TrimSpace(string(body))) + } + + if isPlainTextURL(url) { + raw, err := io.ReadAll(io.LimitReader(resp.Body, 20<<20)) + if err != nil { + return err + } + text := strings.TrimSpace(string(raw)) + if text == "" { + return fmt.Errorf("empty text response") + } + return os.WriteFile(outPath, []byte(text+"\n"), 0o644) + } + + tmp, err := os.CreateTemp(filepath.Dir(outPath), "source-*.docx") + if err != nil { + return err + } + tmpPath := tmp.Name() + defer os.Remove(tmpPath) + + if _, err := io.Copy(tmp, resp.Body); err != nil { + tmp.Close() + return err + } + if err := tmp.Close(); err != nil { + return err + } + + text, err := docxText(tmpPath) + if err != nil { + return err + } + text = strings.TrimSpace(text) + if text == "" { + return fmt.Errorf("no text extracted from docx") + } + return os.WriteFile(outPath, []byte(text+"\n"), 0o644) +} + +func isPlainTextURL(rawURL string) bool { + path := strings.ToLower(rawURL) + return strings.HasSuffix(path, ".txt") || strings.HasSuffix(path, ".md") +} + +func docxText(path string) (string, error) { + r, err := zip.OpenReader(path) + if err != nil { + return "", err + } + defer r.Close() + + var doc *zip.File + for _, f := range r.File { + if f.Name == "word/document.xml" { + doc = f + break + } + } + if doc == nil { + return "", fmt.Errorf("word/document.xml not found") + } + + rc, err := doc.Open() + if err != nil { + return "", err + } + defer rc.Close() + + dec := xml.NewDecoder(rc) + var b strings.Builder + for { + tok, err := dec.Token() + if err == io.EOF { + break + } + if err != nil { + return "", err + } + switch el := tok.(type) { + case xml.StartElement: + if el.Name.Local == "t" { + var text string + if err := dec.DecodeElement(&text, &el); err != nil { + return "", err + } + b.WriteString(text) + } else if el.Name.Local == "tab" { + b.WriteByte('\t') + } else if el.Name.Local == "br" || el.Name.Local == "cr" { + b.WriteByte('\n') + } + case xml.EndElement: + if el.Name.Local == "p" { + b.WriteByte('\n') + } + } + } + return b.String(), nil +} + +func fatal(format string, args ...any) { + fmt.Fprintf(os.Stderr, "promo-source-fetch: "+format+"\n", args...) + os.Exit(1) +} diff --git a/bte-promo-script/tools/sourcefetch/main_test.go b/bte-promo-script/tools/sourcefetch/main_test.go new file mode 100644 index 0000000..c6819c3 --- /dev/null +++ b/bte-promo-script/tools/sourcefetch/main_test.go @@ -0,0 +1,44 @@ +package main + +import ( + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestDocxTextLocal(t *testing.T) { + path := os.Getenv("TEST_DOCX_PATH") + if path == "" { + t.Skip("set TEST_DOCX_PATH to run") + } + text, err := docxText(path) + require.NoError(t, err) + require.NotEmpty(t, text) +} + +func TestFetchAndExtract(t *testing.T) { + docxPath := os.Getenv("TEST_DOCX_PATH") + if docxPath == "" { + t.Skip("set TEST_DOCX_PATH to run") + } + raw, err := os.ReadFile(docxPath) + require.NoError(t, err) + + srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + _, _ = w.Write(raw) + })) + defer srv.Close() + + dir := t.TempDir() + out := filepath.Join(dir, "ep01.txt") + require.NoError(t, fetchAndExtract(srv.Client(), srv.URL, out)) + + got, err := os.ReadFile(out) + require.NoError(t, err) + require.NotEmpty(t, got) +} diff --git a/config/crd/bases/gastown.gastown.io_polecats.yaml b/config/crd/bases/gastown.gastown.io_polecats.yaml index 5910944..5acf337 100644 --- a/config/crd/bases/gastown.gastown.io_polecats.yaml +++ b/config/crd/bases/gastown.gastown.io_polecats.yaml @@ -357,13 +357,14 @@ spec: pattern: ^[a-zA-Z0-9._/-]+$ type: string gitRepository: - description: GitRepository is the git repo URL to clone (SSH or - HTTPS format) - pattern: ^(git@[a-zA-Z0-9._-]+:|https?://[a-zA-Z0-9._-]+/)[a-zA-Z0-9._/-]+(\.git)?$ + description: |- + GitRepository is the git repo URL to clone (SSH or HTTPS format) + Required unless SkipGitInit is true. Format validated by admission webhook. type: string gitSecretRef: - description: GitSecretRef references a Secret containing SSH key - for git + description: |- + GitSecretRef references a Secret containing SSH key for git + Required unless SkipGitInit is true. properties: name: description: name is the name of the secret. @@ -433,6 +434,11 @@ spec: More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ type: object type: object + skipGitInit: + description: |- + SkipGitInit skips git clone/checkout and uses a static workspace baked into the agent image. + A workspace-init container copies /opt/bte-promo-tool into WorkspacePath on an emptyDir volume. + type: boolean sshKnownHostsConfigMapRef: description: |- SSHKnownHostsConfigMapRef references a ConfigMap containing SSH known_hosts @@ -464,9 +470,12 @@ spec: (defaults to feature/) pattern: ^[a-zA-Z0-9._/-]+$ type: string - required: - - gitRepository - - gitSecretRef + workspacePath: + description: |- + WorkspacePath is the working directory for the agent when SkipGitInit is true. + Defaults to /workspace/promo-tool. + pattern: ^/[a-zA-Z0-9._/-]+$ + type: string type: object maxIdleSeconds: description: MaxIdleSeconds terminates polecat if idle for this duration diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index 6a75937..bc1af44 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -4,5 +4,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization images: - name: controller - newName: ghcr.io/boshu2/gastown-operator - newTag: latest + newName: gastown-operator + newTag: bte-20260806100508 diff --git a/config/samples/litellm/polecat-madeye.yaml b/config/samples/litellm/polecat-madeye.yaml new file mode 100644 index 0000000..e7c513c --- /dev/null +++ b/config/samples/litellm/polecat-madeye.yaml @@ -0,0 +1,52 @@ +# Example Polecat routed through in-cluster madeye-proxy → MadEye +apiVersion: gastown.gastown.io/v1alpha1 +kind: Polecat +metadata: + name: madeye-smoke + namespace: gastown-system +spec: + rig: smoke + desiredState: Working + beadID: smoke-001 + taskDescription: | + Reply with a short hello and confirm which model you are using. + Do not modify any files. Exit after the reply. + executionMode: kubernetes + agent: claude-code + agentConfig: + provider: litellm + model: claude-opus-4-8 + modelProvider: + # Claude Code Anthropic-compatible endpoint (madeye-proxy Service) + endpoint: http://madeye-proxy.gastown-system.svc:4000 + apiKeySecretRef: + name: madeye-proxy-auth + key: master-key + env: + - name: CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY + value: "1" + kubernetes: + gitRepository: git@github.com:example/smoke-repo.git + gitBranch: main + gitSecretRef: + name: git-creds + # No direct Anthropic key — gateway auth comes from agentConfig + activeDeadlineSeconds: 600 + resources: + requests: + cpu: 250m + memory: 512Mi + limits: + cpu: "1" + memory: 2Gi +--- +# Secret referenced by agentConfig.modelProvider.apiKeySecretRef +# Value must match DefaultProxyMasterKey in bte-promo-script/api/defaults.go +apiVersion: v1 +kind: Secret +metadata: + name: madeye-proxy-auth + namespace: gastown-system +type: Opaque +stringData: + master-key: sk-local-madeye-proxy diff --git a/docs/CONFIG.md b/docs/CONFIG.md index da5b421..60227ba 100644 --- a/docs/CONFIG.md +++ b/docs/CONFIG.md @@ -164,9 +164,14 @@ data: | `executionMode` | `kubernetes` | Run as Pod | | `agent` | `claude-code` | Coding agent type | | `agentConfig.provider` | `litellm` | LLM provider | +| `agentConfig.model` | - | Sets `ANTHROPIC_MODEL` on the Polecat pod | +| `agentConfig.modelProvider.endpoint` | - | Sets `ANTHROPIC_BASE_URL` (MadEye proxy / gateway) | +| `agentConfig.modelProvider.apiKeySecretRef` | - | Sets `ANTHROPIC_AUTH_TOKEN` (Bearer) | | `kubernetes.gitBranch` | `main` | Base branch | | `kubernetes.activeDeadlineSeconds` | `3600` | 1 hour max runtime | +For MadEye via the in-cluster proxy, see [bte-promo-script/INFRA-README.md](../bte-promo-script/INFRA-README.md). + ### Rig Defaults | Field | Default | Notes | diff --git a/helm/gastown-operator/crds/gastown.gastown.io_polecats.yaml b/helm/gastown-operator/crds/gastown.gastown.io_polecats.yaml index 5910944..5acf337 100644 --- a/helm/gastown-operator/crds/gastown.gastown.io_polecats.yaml +++ b/helm/gastown-operator/crds/gastown.gastown.io_polecats.yaml @@ -357,13 +357,14 @@ spec: pattern: ^[a-zA-Z0-9._/-]+$ type: string gitRepository: - description: GitRepository is the git repo URL to clone (SSH or - HTTPS format) - pattern: ^(git@[a-zA-Z0-9._-]+:|https?://[a-zA-Z0-9._-]+/)[a-zA-Z0-9._/-]+(\.git)?$ + description: |- + GitRepository is the git repo URL to clone (SSH or HTTPS format) + Required unless SkipGitInit is true. Format validated by admission webhook. type: string gitSecretRef: - description: GitSecretRef references a Secret containing SSH key - for git + description: |- + GitSecretRef references a Secret containing SSH key for git + Required unless SkipGitInit is true. properties: name: description: name is the name of the secret. @@ -433,6 +434,11 @@ spec: More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ type: object type: object + skipGitInit: + description: |- + SkipGitInit skips git clone/checkout and uses a static workspace baked into the agent image. + A workspace-init container copies /opt/bte-promo-tool into WorkspacePath on an emptyDir volume. + type: boolean sshKnownHostsConfigMapRef: description: |- SSHKnownHostsConfigMapRef references a ConfigMap containing SSH known_hosts @@ -464,9 +470,12 @@ spec: (defaults to feature/) pattern: ^[a-zA-Z0-9._/-]+$ type: string - required: - - gitRepository - - gitSecretRef + workspacePath: + description: |- + WorkspacePath is the working directory for the agent when SkipGitInit is true. + Defaults to /workspace/promo-tool. + pattern: ^/[a-zA-Z0-9._/-]+$ + type: string type: object maxIdleSeconds: description: MaxIdleSeconds terminates polecat if idle for this duration diff --git a/images/polecat-agent/Dockerfile b/images/polecat-agent/Dockerfile index fd2a5f2..53e71da 100644 --- a/images/polecat-agent/Dockerfile +++ b/images/polecat-agent/Dockerfile @@ -9,14 +9,15 @@ # Usage: # docker pull ghcr.io/boshu2/polecat-agent:latest # -# Build: -# docker build -t polecat-agent:latest images/polecat-agent/ +# Build (from repo root — needed for promo-finish): +# docker build -f images/polecat-agent/Dockerfile -t polecat-agent:local . # # Multi-arch build with attestations: # docker buildx build --platform linux/amd64,linux/arm64 \ # --sbom=true --provenance=true \ +# -f images/polecat-agent/Dockerfile \ # -t ghcr.io/boshu2/polecat-agent:0.4.0 \ -# --push images/polecat-agent/ +# --push . # ============================================================================== # Version Pins - Update these for each release @@ -25,7 +26,7 @@ ARG CLAUDE_CODE_VERSION=2.0.22 # Gas Town CLI: https://github.com/steveyegge/gastown ARG GT_VERSION=main -ARG GOLANG_VERSION=1.24 +ARG GOLANG_VERSION=1.26 # Base image - Debian slim for glibc compatibility ARG DEBIAN_VERSION=bookworm-slim @@ -38,9 +39,34 @@ RUN apk add --no-cache git WORKDIR /build ARG GT_VERSION +ENV GOTOOLCHAIN=auto RUN git clone --depth 1 --branch ${GT_VERSION} https://github.com/steveyegge/gastown.git . && \ CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/gt ./cmd/gt +# ============================================================================== +# Stage 1b: Build promo-finish (orchestrator handoff tool) +# Build with context = repo root: +# docker build -f images/polecat-agent/Dockerfile -t polecat-agent:local . +# ============================================================================== +FROM golang:${GOLANG_VERSION}-alpine AS promo-finish-builder +WORKDIR /src +ENV GOTOOLCHAIN=auto +COPY go.mod go.sum ./ +RUN go mod download +COPY bte-promo-script/tools/finish ./bte-promo-script/tools/finish +RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/promo-finish ./bte-promo-script/tools/finish + +# ============================================================================== +# Stage 1c: Build promo-source-fetch (episode docx download for promo jobs) +# ============================================================================== +FROM golang:${GOLANG_VERSION}-alpine AS promo-source-fetch-builder +WORKDIR /src +ENV GOTOOLCHAIN=auto +COPY go.mod go.sum ./ +RUN go mod download +COPY bte-promo-script/tools/sourcefetch ./bte-promo-script/tools/sourcefetch +RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o /out/promo-source-fetch ./bte-promo-script/tools/sourcefetch + # ============================================================================== # Stage 2: Build polecat-agent image # ============================================================================== @@ -80,9 +106,11 @@ RUN curl -fsSL https://claude.ai/install.sh | bash -s ${CLAUDE_CODE_VERSION} && # Verify installation /usr/local/bin/claude --version -# Copy gt CLI from builder +# Copy gt CLI + promo-finish from builders COPY --from=gt-builder /out/gt /usr/local/bin/gt -RUN chmod +x /usr/local/bin/gt +COPY --from=promo-finish-builder /out/promo-finish /usr/local/bin/promo-finish +COPY --from=promo-source-fetch-builder /out/promo-source-fetch /usr/local/bin/promo-source-fetch +RUN chmod +x /usr/local/bin/gt /usr/local/bin/promo-finish /usr/local/bin/promo-source-fetch # Setup SSH directory with proper permissions RUN mkdir -p /home/nonroot/.ssh && \ @@ -101,6 +129,10 @@ RUN git config --system user.email "polecat@gastown.local" && \ # Create workspace directory RUN mkdir -p /workspace && chown polecat:polecat /workspace +# BTE promo pipeline (static workspace — copied to emptyDir by workspace-init) +COPY bte-promo-script/repos/bte-promo-script-repo /opt/bte-promo-tool +RUN chown -R polecat:polecat /opt/bte-promo-tool + # Switch to non-root user USER polecat WORKDIR /workspace @@ -109,6 +141,7 @@ WORKDIR /workspace RUN echo "=== Installed Versions ===" && \ echo "Claude Code: $(claude --version)" && \ echo "gt CLI: $(gt version 2>/dev/null || echo 'installed')" && \ + echo "promo-finish: $(promo-finish --help 2>&1 | head -1 || echo 'installed')" && \ echo "git: $(git --version)" && \ echo "==========================" diff --git a/internal/controller/polecat_controller.go b/internal/controller/polecat_controller.go index f12369b..9e3ce91 100644 --- a/internal/controller/polecat_controller.go +++ b/internal/controller/polecat_controller.go @@ -89,13 +89,14 @@ func (r *PolecatReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct return r.handleDeletion(ctx, &polecat, timer) } - // Add finalizer if not present + // Add finalizer if not present (Patch avoids clobbering spec fields set concurrently). if !controllerutil.ContainsFinalizer(&polecat, polecatFinalizer) { log.Info("Adding finalizer to Polecat", "resource", polecat.Name, "namespace", polecat.Namespace) + base := polecat.DeepCopy() controllerutil.AddFinalizer(&polecat, polecatFinalizer) - if err := r.Update(ctx, &polecat); err != nil { + if err := r.Patch(ctx, &polecat, client.MergeFrom(base)); err != nil { timer.RecordResult(metrics.ResultError) return ctrl.Result{}, gterrors.Wrap(err, "failed to add finalizer") } @@ -303,7 +304,15 @@ func (r *PolecatReconciler) syncStatusFromPod(ctx context.Context, polecat *gast // Map Pod phase to Polecat phase and set conditions. // We set BOTH old conditions (Ready, Working) and new standard conditions // (Available, Progressing, Degraded) for backward compatibility during transition. - switch p.Status.Phase { + podPhase := p.Status.Phase + // Agent success is what matters: telemetry sidecar failures must not mark work Stuck. + if podPhase == corev1.PodFailed { + if code, ok := pod.AgentContainerExitCode(p); ok && code == 0 { + podPhase = corev1.PodSucceeded + } + } + + switch podPhase { case corev1.PodPending: polecat.Status.Phase = gastownv1alpha1.PolecatPhaseWorking polecat.Status.PodActive = false diff --git a/pkg/pod/agent_status.go b/pkg/pod/agent_status.go new file mode 100644 index 0000000..3eb1c57 --- /dev/null +++ b/pkg/pod/agent_status.go @@ -0,0 +1,17 @@ +package pod + +import corev1 "k8s.io/api/core/v1" + +// AgentContainerExitCode returns the claude agent container exit code when terminated. +func AgentContainerExitCode(p *corev1.Pod) (int32, bool) { + for _, cs := range p.Status.ContainerStatuses { + if cs.Name != ClaudeContainerName { + continue + } + if cs.State.Terminated != nil { + return cs.State.Terminated.ExitCode, true + } + return 0, false + } + return 0, false +} diff --git a/pkg/pod/agent_status_test.go b/pkg/pod/agent_status_test.go new file mode 100644 index 0000000..44ff9cd --- /dev/null +++ b/pkg/pod/agent_status_test.go @@ -0,0 +1,51 @@ +package pod + +import ( + "testing" + + corev1 "k8s.io/api/core/v1" +) + +func TestAgentContainerExitCode(t *testing.T) { + t.Run("claude exited zero", func(t *testing.T) { + p := &corev1.Pod{ + Status: corev1.PodStatus{ + ContainerStatuses: []corev1.ContainerStatus{ + { + Name: ClaudeContainerName, + State: corev1.ContainerState{ + Terminated: &corev1.ContainerStateTerminated{ExitCode: 0}, + }, + }, + { + Name: TelemetryContainerName, + State: corev1.ContainerState{ + Terminated: &corev1.ContainerStateTerminated{ExitCode: 1}, + }, + }, + }, + }, + } + code, ok := AgentContainerExitCode(p) + if !ok || code != 0 { + t.Fatalf("expected claude exit 0, got code=%d ok=%v", code, ok) + } + }) + + t.Run("claude still running", func(t *testing.T) { + p := &corev1.Pod{ + Status: corev1.PodStatus{ + ContainerStatuses: []corev1.ContainerStatus{ + { + Name: ClaudeContainerName, + State: corev1.ContainerState{Running: &corev1.ContainerStateRunning{}}, + }, + }, + }, + } + _, ok := AgentContainerExitCode(p) + if ok { + t.Fatal("expected not terminated") + } + }) +} diff --git a/pkg/pod/builder.go b/pkg/pod/builder.go index 2d7eb57..4eb7553 100644 --- a/pkg/pod/builder.go +++ b/pkg/pod/builder.go @@ -17,8 +17,10 @@ limitations under the License. package pod import ( + "encoding/json" "fmt" "os" + "strings" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -29,9 +31,14 @@ import ( const ( // Container names - GitInitContainerName = "git-init" - ClaudeContainerName = "claude" - TelemetryContainerName = "telemetry" + GitInitContainerName = "git-init" + WorkspaceInitContainerName = "workspace-init" + ClaudeContainerName = "claude" + TelemetryContainerName = "telemetry" + + // BakedPromoToolImagePath is where polecat-agent stores the static promo pipeline. + BakedPromoToolImagePath = "/opt/bte-promo-tool" + DefaultSkipGitWorkspace = "/workspace/promo-tool" // Volume names WorkspaceVolumeName = "workspace" @@ -40,6 +47,12 @@ const ( TmpVolumeName = "tmp" HomeVolumeName = "home" MetricsVolumeName = "metrics" + DevOutputVolumeName = "dev-output" + DevOutputMountPath = "/workspace/dev-output" + AnnotationDevOutputHost = "gastown.io/dev-output-host" + DevOutputInitContainerName = "dev-output-init" + AnnotationSourceDocuments = "gastown.io/source-documents" + SourceFetchContainerName = "source-fetch" SSHKnownHostsVolumeName = "ssh-known-hosts" // Mount paths @@ -114,6 +127,39 @@ func NewBuilder(polecat *gastownv1alpha1.Polecat) *Builder { return &Builder{polecat: polecat} } +func (b *Builder) skipGitInit() bool { + return b.polecat.Spec.Kubernetes != nil && b.polecat.Spec.Kubernetes.SkipGitInit +} + +func (b *Builder) devOutputHostPath() string { + if !b.skipGitInit() { + return "" + } + return b.polecat.Annotations[AnnotationDevOutputHost] +} + +func (b *Builder) sourceDocumentURLs() []string { + if !b.skipGitInit() { + return nil + } + raw := strings.TrimSpace(b.polecat.Annotations[AnnotationSourceDocuments]) + if raw == "" { + return nil + } + var urls []string + if err := json.Unmarshal([]byte(raw), &urls); err != nil { + return nil + } + return urls +} + +func (b *Builder) workspacePath() string { + if b.polecat.Spec.Kubernetes != nil && b.polecat.Spec.Kubernetes.WorkspacePath != "" { + return b.polecat.Spec.Kubernetes.WorkspacePath + } + return DefaultSkipGitWorkspace +} + // GetGitImage returns the git image to use, checking environment variable first func GetGitImage() string { if img := os.Getenv(EnvGitImage); img != "" { @@ -147,6 +193,16 @@ func (b *Builder) Build() (*corev1.Pod, error) { k8sSpec := b.polecat.Spec.Kubernetes podName := fmt.Sprintf("polecat-%s", b.polecat.Name) + initContainers := []corev1.Container{} + if b.skipGitInit() { + initContainers = append(initContainers, b.buildWorkspaceInitContainer()) + if len(b.sourceDocumentURLs()) > 0 { + initContainers = append(initContainers, b.buildSourceFetchContainer()) + } + } else { + initContainers = append(initContainers, b.buildGitInitContainer()) + } + pod := &corev1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: podName, @@ -162,20 +218,25 @@ func (b *Builder) Build() (*corev1.Pod, error) { ActiveDeadlineSeconds: k8sSpec.ActiveDeadlineSeconds, AutomountServiceAccountToken: boolPtr(false), SecurityContext: b.buildPodSecurityContext(), - InitContainers: []corev1.Container{ - b.buildGitInitContainer(), - }, - Containers: []corev1.Container{ - b.buildClaudeContainer(), - b.buildTelemetrySidecar(), - }, - Volumes: b.buildVolumes(), + InitContainers: initContainers, + Containers: b.buildContainers(), + Volumes: b.buildVolumes(), }, } return pod, nil } +func (b *Builder) buildContainers() []corev1.Container { + containers := []corev1.Container{b.buildClaudeContainer()} + // Promo / static-workspace polecats do not need Prometheus telemetry; the alpine + // nc sidecar often exits non-zero and marks the whole pod Failed despite Claude succeeding. + if !b.skipGitInit() { + containers = append(containers, b.buildTelemetrySidecar()) + } + return containers +} + // buildGitInitContainer creates the git init container spec func (b *Builder) buildGitInitContainer() corev1.Container { k8sSpec := b.polecat.Spec.Kubernetes @@ -296,6 +357,82 @@ echo "Git setup complete. Working branch: $WORK_BRANCH" } } +// buildWorkspaceInitContainer copies a static workspace from the agent image into emptyDir. +func (b *Builder) buildWorkspaceInitContainer() corev1.Container { + workspaceScript := fmt.Sprintf(` +set -e +DEST="%s" +SRC="%s" +mkdir -p "$DEST" +cp -a "${SRC}/." "${DEST}/" +echo "Static workspace copied from ${SRC} to ${DEST}" +`, b.workspacePath(), BakedPromoToolImagePath) + + return corev1.Container{ + Name: WorkspaceInitContainerName, + Image: b.agentImage(), + Command: []string{"/bin/sh", "-c"}, + Args: []string{workspaceScript}, + SecurityContext: b.buildSecurityContext(), + VolumeMounts: []corev1.VolumeMount{ + { + Name: WorkspaceVolumeName, + MountPath: WorkspaceMountPath, + }, + }, + } +} + +// buildDevOutputInitContainer chmods the hostPath mount so the non-root agent can write W4 exports. +func (b *Builder) buildDevOutputInitContainer() corev1.Container { + script := fmt.Sprintf(` +set -e +chmod 777 %s 2>/dev/null || true +echo "dev-output mount ready at %s" +`, DevOutputMountPath, DevOutputMountPath) + + runAsRoot := int64(0) + return corev1.Container{ + Name: DevOutputInitContainerName, + Image: "debian:bookworm-slim", + Command: []string{"/bin/sh", "-c"}, + Args: []string{script}, + SecurityContext: &corev1.SecurityContext{ + RunAsUser: &runAsRoot, + }, + VolumeMounts: []corev1.VolumeMount{ + { + Name: DevOutputVolumeName, + MountPath: DevOutputMountPath, + }, + }, + } +} + +// buildSourceFetchContainer downloads optional episode docx URLs into the workspace. +func (b *Builder) buildSourceFetchContainer() corev1.Container { + urls := b.sourceDocumentURLs() + dest := fmt.Sprintf("%s/show source/%s", b.workspacePath(), b.polecat.Name) + raw, _ := json.Marshal(urls) + + return corev1.Container{ + Name: SourceFetchContainerName, + Image: b.agentImage(), + Command: []string{"/usr/local/bin/promo-source-fetch"}, + Args: []string{"--dest", dest}, + Env: []corev1.EnvVar{ + {Name: "PROMO_SOURCE_DOCUMENTS", Value: string(raw)}, + }, + SecurityContext: b.buildSecurityContext(), + VolumeMounts: []corev1.VolumeMount{ + { + Name: WorkspaceVolumeName, + MountPath: WorkspaceMountPath, + }, + }, + } +} + // buildGitInitVolumeMounts creates volume mounts for the git init container func (b *Builder) buildGitInitVolumeMounts() []corev1.VolumeMount { k8sSpec := b.polecat.Spec.Kubernetes @@ -335,81 +472,9 @@ func (b *Builder) buildGitInitVolumeMounts() []corev1.VolumeMount { // buildClaudeContainer creates the Claude agent container spec func (b *Builder) buildClaudeContainer() corev1.Container { k8sSpec := b.polecat.Spec.Kubernetes + image := b.agentImage() - // Use custom image if specified, otherwise use configured default - image := GetClaudeImage() - if k8sSpec.Image != "" { - image = k8sSpec.Image - } - - // Build the agent startup script - agentScript := fmt.Sprintf(` -set -e - -# Configure npm for non-root global installs -export NPM_CONFIG_PREFIX="$HOME/.npm-global" -export PATH="$HOME/.npm-global/bin:$PATH" -mkdir -p "$HOME/.npm-global" - -# Copy Claude credentials from read-only mount to writable HOME -mkdir -p "$HOME/.claude" -if [ -f "%s/.credentials.json" ]; then - cp "%s/.credentials.json" "$HOME/.claude/.credentials.json" - echo "Claude credentials copied to $HOME/.claude/" -fi - -# Configure SSH for git operations (known_hosts already set up by init container) -mkdir -p "$HOME/.ssh" -if [ -f "%s/ssh-privatekey" ]; then - cp "%s/ssh-privatekey" "$HOME/.ssh/id_rsa" - chmod 600 "$HOME/.ssh/id_rsa" - echo "Git SSH key configured" -fi - -# Configure git user for commits -git config --global user.name "Gas Town Polecat" -git config --global user.email "polecat@gastown.io" - -# Verify Claude Code is available (pre-installed in polecat-agent image) -echo "Verifying Claude Code CLI..." -claude --version || { echo "ERROR: Claude CLI not found. Use ghcr.io/boshu2/polecat-agent image."; exit 1; } - -# SECURITY: --dangerously-skip-permissions is required for headless operation. -# This grants elevated privileges to the Claude agent. Mitigations: -# - Pod runs as non-root with read-only root filesystem -# - Network policies should restrict outbound traffic -# - RBAC should limit polecat creation to trusted namespaces -# See docs/SECURITY.md for full threat model. -echo "Starting Claude Code agent..." -echo "Working on issue: $GT_ISSUE" - -# Build the prompt with task description if available -if [ -n "$GT_TASK_DESCRIPTION" ]; then - echo "=== Task Description ===" - echo "$GT_TASK_DESCRIPTION" - echo "========================" - PROMPT="You are a Gas Town polecat worker. Your task: - -ISSUE: $GT_ISSUE -TASK: $GT_TASK_DESCRIPTION - -INSTRUCTIONS: -1. Implement the task described above -2. After completing the work: - - git add the changed files - - git commit -m 'feat($GT_ISSUE): ' - - git push origin HEAD - - gh pr create --fill - -Stay focused on this specific task. Do not fix unrelated issues." -else - PROMPT="You are a Gas Town polecat worker assigned to issue $GT_ISSUE. " - PROMPT="${PROMPT}Read the repository and implement the task. " - PROMPT="${PROMPT}After completing: git add, commit, push, and gh pr create --fill." -fi - -exec claude --print --dangerously-skip-permissions "$PROMPT" -`, ClaudeCredsMountPath, ClaudeCredsMountPath, GitCredsMountPath, GitCredsMountPath) + agentScript := b.buildAgentScript() // Build environment variables envVars := []corev1.EnvVar{ @@ -435,8 +500,11 @@ exec claude --print --dangerously-skip-permissions "$PROMPT" }, } - // Add API key from secret if configured - if k8sSpec.ApiKeySecretRef != nil { + envVars = append(envVars, b.buildAgentConfigEnv()...) + + // Direct Anthropic API key (used when not routing through a gateway). + // Gateway auth from agentConfig.modelProvider takes precedence via ANTHROPIC_AUTH_TOKEN. + if k8sSpec.ApiKeySecretRef != nil && !b.hasGatewayAuth() { envVars = append(envVars, corev1.EnvVar{ Name: "ANTHROPIC_API_KEY", ValueFrom: &corev1.EnvVarSource{ @@ -456,11 +524,6 @@ exec claude --print --dangerously-skip-permissions "$PROMPT" Name: WorkspaceVolumeName, MountPath: WorkspaceMountPath, }, - { - Name: GitCredsVolumeName, - MountPath: GitCredsMountPath, - ReadOnly: true, - }, { Name: TmpVolumeName, MountPath: TmpMountPath, @@ -471,6 +534,21 @@ exec claude --print --dangerously-skip-permissions "$PROMPT" }, } + if !b.skipGitInit() { + volumeMounts = append(volumeMounts, corev1.VolumeMount{ + Name: GitCredsVolumeName, + MountPath: GitCredsMountPath, + ReadOnly: true, + }) + } + + if b.devOutputHostPath() != "" { + volumeMounts = append(volumeMounts, corev1.VolumeMount{ + Name: DevOutputVolumeName, + MountPath: DevOutputMountPath, + }) + } + // Add claude creds mount only if configured (for OAuth auth) if k8sSpec.ClaudeCredsSecretRef != nil { volumeMounts = append(volumeMounts, corev1.VolumeMount{ @@ -480,12 +558,17 @@ exec claude --print --dangerously-skip-permissions "$PROMPT" }) } + workingDir := fmt.Sprintf("%s/repo", WorkspaceMountPath) + if b.skipGitInit() { + workingDir = b.workspacePath() + } + container := corev1.Container{ Name: ClaudeContainerName, Image: image, Command: []string{"/bin/sh", "-c"}, Args: []string{agentScript}, - WorkingDir: fmt.Sprintf("%s/repo", WorkspaceMountPath), + WorkingDir: workingDir, SecurityContext: b.buildSecurityContext(), Env: envVars, VolumeMounts: volumeMounts, @@ -495,6 +578,233 @@ exec claude --print --dangerously-skip-permissions "$PROMPT" return container } +func (b *Builder) agentImage() string { + k8sSpec := b.polecat.Spec.Kubernetes + agentConfig := b.polecat.Spec.AgentConfig + + image := GetClaudeImage() + if agentConfig != nil && agentConfig.Image != "" { + image = agentConfig.Image + } + if k8sSpec.Image != "" { + image = k8sSpec.Image + } + return image +} + +func (b *Builder) buildAgentScript() string { + credsSetup := fmt.Sprintf(` +# Copy Claude credentials from read-only mount to writable HOME +mkdir -p "$HOME/.claude" +if [ -f "%s/.credentials.json" ]; then + cp "%s/.credentials.json" "$HOME/.claude/.credentials.json" + echo "Claude credentials copied to $HOME/.claude/" +fi +`, ClaudeCredsMountPath, ClaudeCredsMountPath) + + setup := credsSetup + instructions := ` +INSTRUCTIONS: +1. Implement the task described above +2. After completing the work: + - git add the changed files + - git commit -m 'feat($GT_ISSUE): ' + - git push origin HEAD + - gh pr create --fill + +Stay focused on this specific task. Do not fix unrelated issues.` + fallbackTail := " After completing: git add, commit, push, and gh pr create --fill." + claudeFlags := `--print --dangerously-skip-permissions` + postClaude := `CLAUDE_EXIT=$?` + promptTail := "" + + if b.skipGitInit() { + instructions = ` +INSTRUCTIONS: +1. Follow the task description above exactly. +2. Do not run git add, commit, push, or open pull requests unless the task explicitly asks you to.` + fallbackTail = " Follow the task instructions in the repository." + // Promo task text from promo-api already includes INSTRUCTIONS; do not duplicate in shell prompt. + promptTail = "" + // Promo/static workspace: --print for headless agent loop. Do not use --max-turns + // (removed from Claude Code 2.0.x); invalid flags can exit after a single text reply. + claudeFlags = `--dangerously-skip-permissions --max-turns 100 -p` + postClaude = fmt.Sprintf(`claude %s "$PROMPT" +CLAUDE_EXIT=$? +if [ "$CLAUDE_EXIT" -ne 0 ]; then + echo "ERROR: claude exited with code $CLAUDE_EXIT" >&2 + exit "$CLAUDE_EXIT" +fi +ELAPSED=$(( $(date +%%s) - START_TS )) +WS="${PROMO_WORKSPACE_PATH:-%s}" +if ! find "$WS/working files" -type f ! -name '.gitkeep' 2>/dev/null | grep -q .; then + echo "ERROR: promo pipeline produced no artifacts under working files/" >&2 + exit 1 +fi +echo "Promo pipeline artifacts present under $WS/working files/"`, claudeFlags, b.workspacePath()) + } else { + promptTail = instructions + fallbackTail + setup += fmt.Sprintf(` +# Configure SSH for git operations (known_hosts already set up by init container) +mkdir -p "$HOME/.ssh" +if [ -f "%s/ssh-privatekey" ]; then + cp "%s/ssh-privatekey" "$HOME/.ssh/id_rsa" + chmod 600 "$HOME/.ssh/id_rsa" + echo "Git SSH key configured" +fi + +# Configure git user for commits +git config --global user.name "Gas Town Polecat" +git config --global user.email "polecat@gastown.io" +`, GitCredsMountPath, GitCredsMountPath) + } + + const promoScriptHead = ` +set -e + +# Configure npm for non-root global installs +export NPM_CONFIG_PREFIX="$HOME/.npm-global" +export PATH="$HOME/.npm-global/bin:$PATH" +mkdir -p "$HOME/.npm-global" + +%s + +# Verify Claude Code is available (pre-installed in polecat-agent image) +echo "Verifying Claude Code CLI..." +claude --version || { echo "ERROR: Claude CLI not found. Use ghcr.io/boshu2/polecat-agent image."; exit 1; } + +# SECURITY: --dangerously-skip-permissions is required for headless operation. +echo "Starting Claude Code agent..." +echo "Working on issue: $GT_ISSUE" +START_TS=$(date +%%s) + +if [ -n "$GT_TASK_DESCRIPTION" ]; then + echo "=== Task Description ===" + echo "$GT_TASK_DESCRIPTION" + echo "========================" + PROMPT="You are a Gas Town polecat worker. Your task: + +ISSUE: $GT_ISSUE +TASK: $GT_TASK_DESCRIPTION + +INSTRUCTIONS: +1. Follow the task description above exactly. +2. Do not run git add, commit, push, or open pull requests unless the task explicitly asks you to." +else + PROMPT="You are a Gas Town polecat worker assigned to issue $GT_ISSUE.%s" +fi +` + const gitScriptHead = ` +set -e + +# Configure npm for non-root global installs +export NPM_CONFIG_PREFIX="$HOME/.npm-global" +export PATH="$HOME/.npm-global/bin:$PATH" +mkdir -p "$HOME/.npm-global" + +%s + +# Verify Claude Code is available (pre-installed in polecat-agent image) +echo "Verifying Claude Code CLI..." +claude --version || { echo "ERROR: Claude CLI not found. Use ghcr.io/boshu2/polecat-agent image."; exit 1; } + +# SECURITY: --dangerously-skip-permissions is required for headless operation. +echo "Starting Claude Code agent..." +echo "Working on issue: $GT_ISSUE" + +if [ -n "$GT_TASK_DESCRIPTION" ]; then + echo "=== Task Description ===" + echo "$GT_TASK_DESCRIPTION" + echo "========================" + PROMPT_BODY=$(cat < 0 { + envVars = append(envVars, ac.Env...) + } + + return envVars +} + // buildTelemetrySidecar creates the telemetry sidecar container spec // //nolint:lll // Prometheus metric lines in embedded shell script cannot be broken @@ -608,15 +918,6 @@ func (b *Builder) buildVolumes() []corev1.Volume { EmptyDir: &corev1.EmptyDirVolumeSource{}, }, }, - { - Name: GitCredsVolumeName, - VolumeSource: corev1.VolumeSource{ - Secret: &corev1.SecretVolumeSource{ - SecretName: k8sSpec.GitSecretRef.Name, - DefaultMode: int32Ptr(0400), - }, - }, - }, { Name: TmpVolumeName, VolumeSource: corev1.VolumeSource{ @@ -637,6 +938,32 @@ func (b *Builder) buildVolumes() []corev1.Volume { }, } + if !b.skipGitInit() { + volumes = append(volumes, corev1.Volume{ + Name: GitCredsVolumeName, + VolumeSource: corev1.VolumeSource{ + Secret: &corev1.SecretVolumeSource{ + SecretName: k8sSpec.GitSecretRef.Name, + DefaultMode: int32Ptr(0400), + }, + }, + }) + } + + // LOCAL TEST ONLY — hostPath export for Docker Desktop (annotation from promo-api). + if host := b.devOutputHostPath(); host != "" { + hostPathType := corev1.HostPathDirectoryOrCreate + volumes = append(volumes, corev1.Volume{ + Name: DevOutputVolumeName, + VolumeSource: corev1.VolumeSource{ + HostPath: &corev1.HostPathVolumeSource{ + Path: host, + Type: &hostPathType, + }, + }, + }) + } + // Add claude creds volume only if configured (for OAuth auth) if k8sSpec.ClaudeCredsSecretRef != nil { volumes = append(volumes, corev1.Volume{ diff --git a/pkg/pod/builder_test.go b/pkg/pod/builder_test.go index baf4f37..a8d880a 100644 --- a/pkg/pod/builder_test.go +++ b/pkg/pod/builder_test.go @@ -609,6 +609,133 @@ func TestContainerEnvironment(t *testing.T) { }) } +func TestAgentConfigGatewayEnv(t *testing.T) { + polecat := &gastownv1alpha1.Polecat{ + ObjectMeta: metav1.ObjectMeta{ + Name: "gateway-polecat", + Namespace: "default", + }, + Spec: gastownv1alpha1.PolecatSpec{ + Rig: "test-rig", + BeadID: "test-bead", + AgentConfig: &gastownv1alpha1.AgentConfig{ + Provider: gastownv1alpha1.LLMProviderLiteLLM, + Model: "claude-opus-4-8", + ModelProvider: &gastownv1alpha1.ModelProviderConfig{ + Endpoint: "http://litellm.gastown-system.svc:4000", + APIKeySecretRef: &gastownv1alpha1.SecretKeyRef{ + Name: "litellm-auth", + Key: "master-key", + }, + }, + Env: []corev1.EnvVar{ + {Name: "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY", Value: "1"}, + }, + }, + Kubernetes: &gastownv1alpha1.KubernetesSpec{ + GitRepository: "git@github.com:org/repo.git", + GitBranch: "main", + GitSecretRef: gastownv1alpha1.SecretReference{Name: "git-secret"}, + ApiKeySecretRef: &gastownv1alpha1.SecretKeyRef{ + Name: "anthropic-api-key", + Key: "api-key", + }, + }, + }, + } + + builder := NewBuilder(polecat) + pod, err := builder.Build() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + envVars := pod.Spec.Containers[0].Env + envMap := make(map[string]corev1.EnvVar, len(envVars)) + for _, env := range envVars { + envMap[env.Name] = env + } + + t.Run("sets ANTHROPIC_BASE_URL from modelProvider.endpoint", func(t *testing.T) { + got := envMap["ANTHROPIC_BASE_URL"].Value + want := "http://litellm.gastown-system.svc:4000" + if got != want { + t.Errorf("expected ANTHROPIC_BASE_URL=%s, got %s", want, got) + } + }) + + t.Run("sets ANTHROPIC_MODEL from agentConfig.model", func(t *testing.T) { + if envMap["ANTHROPIC_MODEL"].Value != "claude-opus-4-8" { + t.Errorf("expected ANTHROPIC_MODEL=claude-opus-4-8, got %s", envMap["ANTHROPIC_MODEL"].Value) + } + }) + + t.Run("sets ANTHROPIC_AUTH_TOKEN from modelProvider.apiKeySecretRef", func(t *testing.T) { + auth := envMap["ANTHROPIC_AUTH_TOKEN"] + if auth.ValueFrom == nil || auth.ValueFrom.SecretKeyRef == nil { + t.Fatal("expected ANTHROPIC_AUTH_TOKEN from secret") + } + if auth.ValueFrom.SecretKeyRef.Name != "litellm-auth" { + t.Errorf("expected secret litellm-auth, got %s", auth.ValueFrom.SecretKeyRef.Name) + } + if auth.ValueFrom.SecretKeyRef.Key != "master-key" { + t.Errorf("expected key master-key, got %s", auth.ValueFrom.SecretKeyRef.Key) + } + }) + + t.Run("skips ANTHROPIC_API_KEY when gateway auth is configured", func(t *testing.T) { + if _, exists := envMap["ANTHROPIC_API_KEY"]; exists { + t.Error("ANTHROPIC_API_KEY should not be set when gateway auth is present") + } + }) + + t.Run("appends agentConfig.env", func(t *testing.T) { + if envMap["CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY"].Value != "1" { + t.Error("expected agentConfig.env to be appended") + } + }) +} + +func TestAgentConfigImageOverride(t *testing.T) { + polecat := &gastownv1alpha1.Polecat{ + ObjectMeta: metav1.ObjectMeta{ + Name: "image-polecat", + Namespace: "default", + }, + Spec: gastownv1alpha1.PolecatSpec{ + Rig: "test-rig", + AgentConfig: &gastownv1alpha1.AgentConfig{ + Image: "ghcr.io/example/custom-agent:v1", + }, + Kubernetes: &gastownv1alpha1.KubernetesSpec{ + GitRepository: "git@github.com:org/repo.git", + GitSecretRef: gastownv1alpha1.SecretReference{Name: "git-secret"}, + ClaudeCredsSecretRef: &gastownv1alpha1.SecretReference{Name: "claude-secret"}, + }, + }, + } + + builder := NewBuilder(polecat) + pod, err := builder.Build() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + if pod.Spec.Containers[0].Image != "ghcr.io/example/custom-agent:v1" { + t.Errorf("expected agentConfig.image override, got %s", pod.Spec.Containers[0].Image) + } + + // kubernetes.image should win over agentConfig.image + polecat.Spec.Kubernetes.Image = "ghcr.io/example/k8s-override:v2" + pod, err = NewBuilder(polecat).Build() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if pod.Spec.Containers[0].Image != "ghcr.io/example/k8s-override:v2" { + t.Errorf("expected kubernetes.image to win, got %s", pod.Spec.Containers[0].Image) + } +} + func TestClaudeCredsVolumeMount(t *testing.T) { polecat := &gastownv1alpha1.Polecat{ ObjectMeta: metav1.ObjectMeta{ @@ -660,3 +787,151 @@ func TestClaudeCredsVolumeMount(t *testing.T) { } }) } + +func TestBuildSkipGitInit(t *testing.T) { + polecat := &gastownv1alpha1.Polecat{ + ObjectMeta: metav1.ObjectMeta{ + Name: "promo-test", + Namespace: "test-ns", + }, + Spec: gastownv1alpha1.PolecatSpec{ + Rig: "promo-script-tool", + DesiredState: gastownv1alpha1.PolecatDesiredWorking, + BeadID: "pst-promo-test", + ExecutionMode: gastownv1alpha1.ExecutionModeKubernetes, + Kubernetes: &gastownv1alpha1.KubernetesSpec{ + SkipGitInit: true, + WorkspacePath: DefaultSkipGitWorkspace, + ApiKeySecretRef: &gastownv1alpha1.SecretKeyRef{ + Name: "litellm-auth", + Key: "master-key", + }, + Image: "polecat-agent:local", + }, + }, + } + + pod, err := NewBuilder(polecat).Build() + if err != nil { + t.Fatalf("Build() error: %v", err) + } + + if len(pod.Spec.InitContainers) != 1 { + t.Fatalf("expected 1 init container, got %d", len(pod.Spec.InitContainers)) + } + if pod.Spec.InitContainers[0].Name != WorkspaceInitContainerName { + t.Errorf("expected workspace-init, got %s", pod.Spec.InitContainers[0].Name) + } + + claude := pod.Spec.Containers[0] + if claude.WorkingDir != DefaultSkipGitWorkspace { + t.Errorf("expected working dir %s, got %s", DefaultSkipGitWorkspace, claude.WorkingDir) + } + + for _, vol := range pod.Spec.Volumes { + if vol.Name == GitCredsVolumeName { + t.Error("git-creds volume should not be present when skipGitInit is true") + } + } + for _, mount := range claude.VolumeMounts { + if mount.Name == GitCredsVolumeName { + t.Error("git-creds mount should not be present when skipGitInit is true") + } + } + + if len(pod.Spec.Containers) != 1 { + t.Fatalf("expected 1 container (claude only), got %d", len(pod.Spec.Containers)) + } + for _, c := range pod.Spec.Containers { + if c.Name == TelemetryContainerName { + t.Error("telemetry sidecar should not be present when skipGitInit is true") + } + } +} + +func TestBuildSkipGitInitDevOutput(t *testing.T) { + polecat := &gastownv1alpha1.Polecat{ + ObjectMeta: metav1.ObjectMeta{ + Name: "promo-dev-out", + Namespace: "test-ns", + Annotations: map[string]string{ + AnnotationDevOutputHost: "/tmp/bte-script-test", + }, + }, + Spec: gastownv1alpha1.PolecatSpec{ + ExecutionMode: gastownv1alpha1.ExecutionModeKubernetes, + Kubernetes: &gastownv1alpha1.KubernetesSpec{ + SkipGitInit: true, + Image: "polecat-agent:local", + }, + }, + } + + pod, err := NewBuilder(polecat).Build() + if err != nil { + t.Fatalf("Build() error: %v", err) + } + + foundVol := false + for _, vol := range pod.Spec.Volumes { + if vol.Name == DevOutputVolumeName { + foundVol = true + if vol.HostPath == nil || vol.HostPath.Path != "/tmp/bte-script-test" { + t.Errorf("unexpected hostPath: %+v", vol.HostPath) + } + } + } + if !foundVol { + t.Error("expected dev-output hostPath volume") + } + + claude := pod.Spec.Containers[0] + foundMount := false + for _, m := range claude.VolumeMounts { + if m.Name == DevOutputVolumeName && m.MountPath == DevOutputMountPath { + foundMount = true + } + } + if !foundMount { + t.Error("expected dev-output mount on claude container") + } +} + +func TestBuildSkipGitInitSourceDocuments(t *testing.T) { + urls := `["https://example.com/ep01.docx","https://example.com/ep02.docx"]` + polecat := &gastownv1alpha1.Polecat{ + ObjectMeta: metav1.ObjectMeta{ + Name: "promo-src", + Namespace: "test-ns", + Annotations: map[string]string{ + AnnotationSourceDocuments: urls, + }, + }, + Spec: gastownv1alpha1.PolecatSpec{ + ExecutionMode: gastownv1alpha1.ExecutionModeKubernetes, + Kubernetes: &gastownv1alpha1.KubernetesSpec{ + SkipGitInit: true, + WorkspacePath: "/workspace/promo-tool", + Image: "polecat-agent:local", + }, + }, + } + + pod, err := NewBuilder(polecat).Build() + if err != nil { + t.Fatalf("Build() error: %v", err) + } + + found := false + for _, ic := range pod.Spec.InitContainers { + if ic.Name == SourceFetchContainerName { + found = true + if ic.Args[1] != "/workspace/promo-tool/show source/promo-src" { + t.Errorf("unexpected dest arg: %v", ic.Args) + } + } + } + if !found { + t.Error("expected source-fetch init container") + } +} diff --git a/templates/polecat-kubernetes.yaml b/templates/polecat-kubernetes.yaml index 2ca33d4..b89b142 100644 --- a/templates/polecat-kubernetes.yaml +++ b/templates/polecat-kubernetes.yaml @@ -79,26 +79,26 @@ spec: agent: claude-code # Agent customization (optional) - # Use for custom LLM providers or gateway endpoints + # Use for MadEye proxy / custom LLM gateways. + # See bte-promo-script/INFRA-README.md # agentConfig: - # # LLM provider # provider: litellm # litellm, anthropic, openai, ollama - # model: claude-sonnet-4 + # model: claude-opus-4-8 # - # # Custom API endpoint (for LiteLLM gateway) + # # Claude Code talks Anthropic format to this URL (ANTHROPIC_BASE_URL) # modelProvider: - # endpoint: https://ai-gateway.example.com/v1 - # apiKeySecretRef: - # name: litellm-api-key - # key: api-key + # endpoint: http://madeye-proxy.gastown-system.svc:4000 + # apiKeySecretRef: # → ANTHROPIC_AUTH_TOKEN (Bearer) + # name: madeye-proxy-auth + # key: master-key # # # Custom container image # image: ghcr.io/boshu2/polecat-agent:custom # # # Extra environment variables # env: - # - name: LOG_LEVEL - # value: "debug" + # - name: CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY + # value: "1" # ============================================ # KUBERNETES EXECUTION CONFIG