$npx -y skills add wanshuiyin/ARIS-Movie-Director --skill comic-cross-layer-gateThe ONE parameterized score-fuser for EVERY comic-author authoring gate — --gate intent|outline|asset|storyboard|blueprint|continuity|p0_proof|compile. A single fuser (not a per-layer split) prevents drift. It NEVER re-runs a reviewer; it collects the reviewer score-nodes alrea
| 1 | # comic-cross-layer-gate — the Universal Authoring Score-Fuser + the Zero-Credit P0 Proof (Phase 1) |
| 2 | |
| 3 | The **acquittal organ of the [`comic-author`](../comic-author/SKILL.md) suite**. Every authoring step |
| 4 | (intent → style → outline → asset → storyboard → blueprint → continuity → the compiled `comic.json`) is a |
| 5 | *generator*; **none of them acquits itself**. They each emit their node(s), fan out independent reviewers, and |
| 6 | then **defer to this one skill** to fuse the scores into a verdict, mint the audit trail, and flip the target's |
| 7 | `status`. It is the image-comic port of aris_movie's 6-gate adversarial decision skill — but folded into **one |
| 8 | parameterized fuser** (Codex's single-fuser design, against the per-layer split that *drifts*: six near-copies |
| 9 | diverge, one fuser stays honest). The downstream per-panel `panel_gate` / page `assembly_gate` are NOT this |
| 10 | skill — those live in [`packages/core/spiral_engine.js`](../../packages/core/spiral_engine.js) and run at bake |
| 11 | time; this skill is the **authoring-side, pre-bake** gate that decides whether a *spec* may advance. |
| 12 | |
| 13 | > **Cardinal lesson, landed as a guard not prose:** *identical scores across rounds = the judge is broken — |
| 14 | > audit the rubric, do not regenerate the artifact* (memory: `feedback_gate_identical_scores_judge_broken`). |
| 15 | > Concretely: this gate carries a `_score_fingerprint` in every `decision` node; if round N's fused per-dim |
| 16 | > vector equals round N−1's **after the artifact changed**, the gate **HALTS and flags `judge_suspect`** — |
| 17 | > the rubric (this skill), not the spec, is the suspect. A gate that emits the same verdict regardless of the |
| 18 | > work is worse than no gate. |
| 19 | |
| 20 | ```text |
| 21 | upstream step emits node(s) + fans out independent reviewers (writes review:* score-nodes + `reviews` edges) |
| 22 | │ |
| 23 | comic-cross-layer-gate <target_node_id> --gate <kind> |
| 24 | ▼ |
| 25 | ⓪ PRE-CHECK structural facts the GATE computes (asset-resolve / policy / count-band / continuity) — RAW, not opinion |
| 26 | ▼ |
| 27 | ① COLLECT reviewer score-nodes via `reviews` edges — NEVER re-run a reviewer; hard-fail if none |
| 28 | ▼ |
| 29 | ② THRESHOLD per-dim min-fuse (max for inverted dims); SKIP missing dims (NEVER 0-substitute); per-gate floor → threshold_verdict |
| 30 | ▼ |
| 31 | ③ ADJUDICATE Codex xhigh (no model pin — local codex config) — sees ONLY {scores + failure_mode tags + threshold_block + raw PATHS + ≤200w verbatim source + verbatim rubric} |
| 32 | ▼ (NEVER reviewer prose / notes / overall — that is the contamination vector) |
| 33 | ④ ASYMMETRIC threshold HARD-VETO over "advance"; Codex SOFT-VETO over everything else |
| 34 | ▼ |
| 35 | ⑤ WRITE decision node (full audit) + (on FAIL only) a positive-invariant failure_mode the NEXT step preloads as a banlist |
| 36 | ▼ |
| 37 | ⑥ FLIP target status → locked (advance) · under_review (needs-work) · rejected (terminal) ; stdout last line: VERDICT=<v> GATE=<kind> TARGET=<id> |
| 38 | ``` |
| 39 | |
| 40 | The `--gate p0_proof` branch is a different shape (a text-only adversarial *review* of the pipeline machinery, |
| 41 | not a score-fuse over a spec) — it is documented in its own section below. It is the **single most important |
| 42 | contract this skill owns**: it runs AFTER [`comic-json-compiler`](../comic-json-compiler/SKILL.md) and |
| 43 | **BEFORE** any metered image bake (the agent `mcp__codex__codex` sidecar), costs **zero generation credits**, |
| 44 | and must clear all blockers in BOTH non-author f |