v2 chunk 2a iter 1: rules 6+18 — ed. invariant, expand publishers
Two prompt edits to SYSTEM_PROMPT_NOTES driven by chunk 1 smoke test
gaps on chapter_first_doyle.toml.
Rule 6 (chapter form) expanded with an explicit invariance statement:
"ed." is the canonical abbreviation regardless of editor count — do
NOT pluralize to "eds." for multiple editors. CMOS NB treats it as
an invariant abbreviation, not a number-agreeing word.
New rule 18 (publisher expansion) mirrors v1 formatter.py rule 14:
publisher names must be in full canonical form, with note-form-
specific examples ("U of Chicago Press" → "University of Chicago
Press"). Includes the same MIT Press / ALA Editions / MLA carve-out
for publishers whose canonical self-presentation legitimately uses
initials.
Two new prompt-content unit tests added to tests/test_note_formatter.py
following the v1 test_formatter.py discipline. TDD cycle: red-green-
verified end-to-end.
Real-API smoke test, 3 v2 exemplars × 2 runs each: 6/6 byte-perfect
matches (was 4/6 in chunk 1; chapter_first_doyle went 0/2 → 2/2,
book and journal still 2/2). v1 untouched, 96/96 v1 tests still
passing. Total suite: 116/116.
This commit is contained in:
@@ -99,9 +99,13 @@ Rules you must follow (CMOS 18th edition specifically, NOTE form):
|
||||
6. CHAPTER IN EDITED BOOK NOTE FORM:
|
||||
Author, "Chapter Title," in *Book Title*, ed. Editor Names
|
||||
(Publisher, Year), specific-page.
|
||||
Use "ed." (abbreviated), NOT "Edited by". The lowercase "in"
|
||||
before the italicized book title is part of CMOS note form
|
||||
and should appear as shown.
|
||||
Use "ed." (abbreviated), NOT "Edited by". The abbreviation "ed."
|
||||
is INVARIANT — use "ed." even when there are multiple editors.
|
||||
Do NOT pluralize to "eds." regardless of editor count. CMOS NB
|
||||
note form treats "ed." as an unchanging abbreviation, not a
|
||||
grammatical word that agrees in number with its referent.
|
||||
The lowercase "in" before the italicized book title is part of
|
||||
CMOS note form and should appear as shown.
|
||||
|
||||
7. TRANSLATED WORKS use "trans." (abbreviated), NOT "Translated by".
|
||||
|
||||
@@ -168,6 +172,20 @@ Rules you must follow (CMOS 18th edition specifically, NOTE form):
|
||||
missing in the source, leave it missing. Do not fabricate
|
||||
authors, publishers, years, page numbers, URLs, or DOIs.
|
||||
|
||||
18. PUBLISHER NAMES must be in FULL canonical form. Do NOT abbreviate.
|
||||
If the messy input contains an abbreviated form, EXPAND it to the
|
||||
canonical full name. Examples:
|
||||
- "U of Chicago Press" → "University of Chicago Press"
|
||||
- "OUP" → "Oxford University Press"
|
||||
- "CUP" → "Cambridge University Press"
|
||||
- "HMC" → "Houghton Mifflin Company"
|
||||
- "Random House" stays "Random House" (already canonical)
|
||||
- "Pantheon Books" stays "Pantheon Books" (already canonical)
|
||||
The exception: publishers whose canonical self-presentation
|
||||
legitimately uses initials (e.g., "MIT Press", "ALA Editions",
|
||||
"MLA") stay in that form. When in doubt, prefer the longer
|
||||
form over the abbreviation.
|
||||
|
||||
Output ONLY the single reformatted note. No preamble, no explanation,
|
||||
no leading number, no code fences.
|
||||
"""
|
||||
|
||||
@@ -53,6 +53,38 @@ def test_system_prompt_mentions_no_ibid():
|
||||
assert "Ibid" in SYSTEM_PROMPT_NOTES or "ibid" in SYSTEM_PROMPT_NOTES.lower()
|
||||
|
||||
|
||||
def test_system_prompt_mentions_publisher_full_form():
|
||||
"""Surfaced by chunk 1 smoke test on chapter_first_doyle: the formatter
|
||||
preserved 'U of Chicago Press' from the messy input instead of
|
||||
expanding it to 'University of Chicago Press'. v1 formatter.py rule 14
|
||||
covers this; the v2 prompt must too. The rule is "publisher names must
|
||||
be in full canonical form, not abbreviated."
|
||||
"""
|
||||
lower = SYSTEM_PROMPT_NOTES.lower()
|
||||
assert "publisher" in lower
|
||||
# Either "do not abbreviate" or "full canonical" or "full form" — any
|
||||
# phrasing that conveys the prohibition.
|
||||
assert (
|
||||
"do not abbreviate" in lower
|
||||
or "not abbreviated" in lower
|
||||
or "full canonical" in lower
|
||||
or "full form" in lower
|
||||
)
|
||||
|
||||
|
||||
def test_system_prompt_mentions_ed_invariant_for_multiple_editors():
|
||||
"""Surfaced by chunk 1 smoke test on chapter_first_doyle: the formatter
|
||||
pluralized 'ed.' to 'eds.' when there were two editors. CMOS NB form
|
||||
uses 'ed.' invariantly regardless of editor count. The prompt must
|
||||
explicitly state this so the model does not grammatically pluralize
|
||||
by default.
|
||||
"""
|
||||
# Search for an explicit mention of "eds." being wrong, OR an explicit
|
||||
# statement that "ed." is invariant / not pluralized.
|
||||
lower = SYSTEM_PROMPT_NOTES.lower()
|
||||
assert "eds." in lower or "invariant" in lower or "do not pluralize" in lower or "not pluralize" in lower
|
||||
|
||||
|
||||
def test_build_user_message_contains_the_messy_input():
|
||||
msg = build_user_message("yu, charles. interior chinatown. 2020, 45")
|
||||
assert "yu, charles. interior chinatown. 2020, 45" in msg
|
||||
|
||||
Reference in New Issue
Block a user