SIGN IN SIGN UP

feat(sepia): prose-layer model fingerprints and a model-identity routing rule

model-fingerprints.md had one layer: narrative-level tells measured by
StoryScope on specific releases (Sonnet 4.6, GPT-5.4, Gemini 3 Flash,
DeepSeek V3.2, Kimi K2.5), fiction only. This adds a second, separately
evidenced layer and the rule that decides when either applies.

Prose layer (vendor guidance, unmeasured). Two vendor prompting pages
are registered in research/sources.md as a new evidence class,
"vendor guidance": ANTHROPIC-FABLE-5-1-PROMPTING (sections "Writing
density" and "Formatting in chat") and OPENAI-GPT-5-6-PROMPTING
(section "Personality, collaboration, and response length"). Each
family in model-fingerprints.md now has a "Narrative layer (S; <release>)"
table — the existing 26 rows, byte-identical to main — and, for Claude
and GPT, a "Prose layer (V; <release>)" table. Gemini, DeepSeek, and
Kimi state "no vendor guidance ingested yet" rather than invented rows.
The Claude table embeds Anthropic's mannered-prose instruction verbatim
(compared character-for-character against the page fetched 2026-09-02,
matched, and confirmed present on the live page the same day) with an
adjacent scope sentence: it governs expository and professional prose,
and on the fiction route it is subordinate to narrative-pass §5, which
decides where metaphor stays. No figure from §5 is restated as a
metaphor budget — the 38% there measures emotion beats led by embodied
sensation, not metaphor density.

Model-identity rule (SKILL.md, Routing). Two identities are determined
before operating, each as family plus version or unknown: the author
model (from the user or metadata) and the executor model (from the
executor's own system context, where a direct statement of the running
model outranks attribution strings such as commit trailers). A version
is the exact release a prose-layer table is tagged with; a generation
name such as GPT-5 is a family. A known author family on the fiction
route loads that family's narrative layer as priors. A known author or
executor family loads the prose layer at the style-pass step —
operative on an exact version match, a prior otherwise. Unknown skips
the file. Identity is never inferred from the prose: six-way attribution
is a trained classifier at 68.4% macro-F1 on 304 narrative features.
The stale "(fiction-centric; use as priors)" load condition is gone.

Report formats (professional-pass.md, rubric.md) gain two lines:
"Model: author=<value> executor=<value>" with three legal values
(unknown | <family> version=unknown | <family> <release>) and
"Prose layer: operative | prior | none".

style-pass.md §2 gains one (V)-marked row — metaphor or idiom standing
in for an available literal phrase — and the §2 lead-in now scopes its
"2–5× overrepresented (L, P)" claim to the L/P rows so the vendor row
cannot be read as a measured template. professional-pass.md check 2
notes density fails in both directions (a trimmed answer that lost a
required caveat fails too; GPT-5.6 over-trims per its vendor), check 6
notes formatting tells flip with model version (Fable 5.1 under-formats,
so sparse formatting is not evidence of a human). The "Deletion beats
addition" guardrail gains a register-drift clause: a rewrite must not
come out more promotional than its source (the drift OpenAI's own
editing snippet warns against). Both READMEs describe the two layers in
one sentence each.

Verification. Plan passed a fresh-context plan-verifier on its third
epoch after two REVISE rounds (family-level trigger vs version
condition; Model: line format vs family-only identities; operative
observation indistinguishable from priors; a 38% axis misuse — all
fixed). End-to-end observations on the working tree, all read-only:
a fresh Fable 5.1 agent reported executor=Claude Fable 5.1 /
Prose layer: operative, cited the new row against two seeded metaphors
absent from the vendor block ("load-bearing wall", "pulls its weight"),
and its refactor replaced both with literal phrases while preserving
every number and key; a fresh Opus 5 agent reported Prose layer: prior
on the same specimen and, on a fiction specimen, left the embodied
peak sentence off the defect list citing §5; Codex CLI (gpt-5.6-luna,
read-only) reported executor=GPT version=unknown / Prose layer: prior
after its developer message stated only "based on GPT-5" — this run
exposed that "GPT-5" was first recorded as a release, which the
release/family definition in the format now prevents. Antigravity and
Grok identity exposure is not tested and not claimed. Unit suite 41
green; check_versions unchanged at 0.4.1 (no release in this commit).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TtoUEQarAYtQYrZLLwqjao
N
Nanako Tsai committed
97fd86ea9ac05d50fab8921d3f09816f5e3e9c4a
Parent: 2b24be6