Skip to content

Commit b3534ee

Browse files
Professional register, compact: hints on screen, not documentation
"add a professional tone to messages - 'the rest is buttons' is casual talk"; "Do this across the board, keep things as compact as possible with a professional tone"; "Do NOT put 'documentation' on screens. Assume just a hint is necessary." The named example, using the reviewer's own wording with the grammar corrected: Publishing needs an assistant for the knowledge files; the rest is buttons. -> Requires an AI-enabled terminal with access to the affected files. Applied to every string still carrying a casual register or explaining itself at length. Measured on DEFAULT-VISIBLE copy only - anything inside a disclosure is opt-in and does not count as "on screen": eval opt-in 292 -> 164 chars reset unsaved edits 275 -> 138 transcript intro 287 -> 150 summary intro 152 -> 89 saves empty state 95 -> 25 Worth knowing -> Reference Something went wrong? -> Recovery Show me exactly what changed -> View pending changes Park a half-finished review -> For incomplete reviews Saves what was typed. Decides nothing. -> Saves entered text. No verdict recorded. Hands it over - the decision is given up. -> Transfers the decision to another owner. best done off-hours -> Best outside business hours a hint not a verdict -> indicative only A review with nothing to fix is still worth sending. -> Reviews with no changes should still be submitted. TWO NOTES ON WHAT I CHANGED THAT WAS NOT MINE. The transcript intro banner was dictated verbatim by the reviewer earlier. It is compacted here on the strength of the later "across the board" instruction, and it also had to change for a factual reason: it told the reader to click "Mark reviewed & next", a label that no longer exists - that button now reads "No changes & next" or "Changes suggested & next" depending on the form. Field help behind the ⓘ icons is untouched. It is opt-in, it is where the long-form explanation belongs, and moving it on-screen is what the instruction forbids. Claude-Session: https://claude.ai/code/session_01VVNYqGza2dFdeWFX7qXnwb
1 parent e33be0f commit b3534ee

1 file changed

Lines changed: 29 additions & 40 deletions

File tree

scripts/review_server.py

Lines changed: 29 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4029,20 +4029,20 @@ def button_legend():
40294029
rows = [
40304030
("Save",
40314031
"reviewed", False,
4032-
"Saves what was typed. Decides nothing.",
4033-
"Park a half-finished review."),
4032+
"Saves entered text. No verdict recorded.",
4033+
"For incomplete reviews."),
40344034
("Suggest & next →",
40354035
"suggested", True,
4036-
"Hands it over — the decision is given up.",
4036+
"Transfers the decision to another owner.",
40374037
"Needs <b>Suggested to</b> (a person) or <b>Reassign to</b> (an agent)."),
40384038
("Re-review",
40394039
"pending", False,
40404040
"Re-opens a decided transcript.",
40414041
"Verdict fields clear. Round 2 means someone decided before &mdash; read theirs first."),
40424042
("Mark reviewed &amp; next &rarr;",
40434043
"reviewed", True,
4044-
"Verdict recorded.",
4045-
"Blocked while a hand-off is set."),
4044+
"Records the verdict.",
4045+
"Unavailable while a hand-off is set."),
40464046
]
40474047
out = ["<details class=card><summary>"
40484048
"<span class=info aria-hidden=true>i</span>"
@@ -4114,11 +4114,9 @@ def detail_page(rel):
41144114
# and all of it above the transcript the reviewer had come to read. The defaults do not
41154115
# need explaining if they are correct, and the rest is on the buttons' own legend.
41164116
banner = ("<div class='bar bnr-ok'>"
4117-
"Review exchanges and put a correction below each. Then fill out the "
4118-
"<b>Summary</b> section for overall changes and suggestions. If the transcript "
4119-
"is good as-is and no changes are necessary, set <b>Answer verdict = good</b> "
4120-
"(optional) and click <b>Mark reviewed &amp; next &rarr;</b> to proceed to the "
4121-
"next transcript."
4117+
"Add a correction under each exchange, then complete the <b>Summary</b>. "
4118+
"If no change is required, set <b>Answer verdict = good</b> and select "
4119+
"<b>No changes &amp; next &rarr;</b>."
41224120
"</div>")
41234121
elif (fm.get("review_status") or "") == "suggested":
41244122
# Nothing here is a verdict yet. Say so loudly, or the owner reads a filled-in form
@@ -4166,9 +4164,8 @@ def detail_page(rel):
41664164
pi, pp = doc_popover("proposed_fix")
41674165
parts.append(
41684166
"<h2 class=sec style='margin-top:var(--forge-spacing-large)'>Summary</h2>"
4169-
"<p class=sub style='margin:0 0 12px'>Fill this in after reading the exchanges above. "
4170-
"The prose is the valuable part &mdash; the fields underneath just classify it so the "
4171-
"right person picks it up.</p>"
4167+
"<p class=sub style='margin:0 0 12px'>Complete after reviewing the exchanges. "
4168+
"Prose carries the substance; the fields route it.</p>"
41724169
f"<div class=card><div class=fld>"
41734170
f"<label>Overall suggestions and comments{pi}"
41744171
f"<span class=trigtag>triggers changes</span></label>{pp}"
@@ -5372,9 +5369,8 @@ def grp(label, rows):
53725369
"<div class=hint>Sending in covers all of these. Discarding rewinds to just before the "
53735370
"save selected, and always leaves a recovery point.</div></details>")
53745371
else:
5375-
saves_html = ("<div class=saves><span class=hint>Nothing saved and unsent — either "
5376-
"not yet saved this sitting, or everything is already sent "
5377-
"in.</span></div>")
5372+
saves_html = ("<div class=saves><span class=hint>Nothing saved and unsent."
5373+
"</span></div>")
53785374
# The change list now lives INSIDE the state bar, collapsed. It was a permanently-open
53795375
# panel between the "Publish your reviews" heading and Part 1, so the first actual step
53805376
# started well down the page - and the list is reference material, not something you act on.
@@ -7852,11 +7848,9 @@ def _eval_optin(spent=False):
78527848
"<label class=evalrow><input type=checkbox id=doeval checked>"
78537849
"<span><b>Include Eval Review</b></span></label>"
78547850
f"<div class=hint style='margin:6px 0 0 26px'>"
7855-
f"Asks the agents this batch's {n_q} question(s) against the {len(files)} changed "
7856-
f"file(s). <b>~{mins} min.</b><br>"
7857-
"<b>The candidate content STAYS live in Foundry afterwards</b> so other "
7858-
"phrasings can be tried on Eval Review &mdash; best done off-hours. It comes down on "
7859-
"Remove evals or send the batch in. Required before a change request.</div></div>")
7851+
f"{n_q} question(s) against {len(files)} changed file(s). <b>~{mins} min.</b><br>"
7852+
"Content stays live in Foundry until removed or sent. Best outside business hours. "
7853+
"Required before a change request.</div></div>")
78607854

78617855

78627856
def _router_warning():
@@ -8154,12 +8148,11 @@ def eval_review_page():
81548148
+ "<p class=sub style='margin:0' id=evstate>"
81558149
+ (f"<b>All {n_tot} approved.</b> Ready to send in."
81568150
if all_ok else
8157-
f"<b>{n_ok} of {n_tot} approved.</b> Tick the ones whose answer is right &mdash; the "
8158-
"send needs all of them.")
8151+
f"<b>{n_ok} of {n_tot} approved.</b> All must be approved before sending.")
81598152
+ "</p>"
81608153
+ f"<p class=sub style='margin:4px 0 0'><code>{html.escape(when)}</code> &middot; "
8161-
f"{len(files)} file(s) &middot; {n_q} question(s) &middot; <b>Match %</b> is word overlap "
8162-
"with the correction, a hint not a verdict.</p>"
8154+
f"{len(files)} file(s) &middot; {n_q} question(s) &middot; <b>Match %</b> is word "
8155+
"overlap, indicative only.</p>"
81638156
+ "<div class=stepacts style='margin-top:10px'>"
81648157
+ "<button class=sec onclick=\"evAll(1)\">Approve all</button>"
81658158
+ "<button class=sec onclick=\"evAll(0)\">Clear all</button>"
@@ -8266,9 +8259,8 @@ def eval_review_page():
82668259
f"<textarea class=evnowbox oninput='evNowEdited(this)' "
82678260
f"data-orig=\"{html.escape(latest.get('answer') or '')}\">"
82688261
f"{html.escape(latest.get('answer') or '(no answer returned)')}</textarea>"
8269-
"<div class=hint style='margin:5px 0 0'>To improve response type comments in "
8270-
"<code>{{ }}</code> inside Now and click <b>Copy prompt</b> to pass to an AI for "
8271-
"further refine content.</div>"
8262+
"<div class=hint style='margin:5px 0 0'>Mark defects inline as "
8263+
"<code>{{ }}</code>, then <b>Copy prompt</b> for an AI-enabled terminal.</div>"
82728264
# DIRECTLY UNDER THE INSTRUCTION THAT NAMES THEM, inside the Now column. They began
82738265
# ABOVE the box, which pushed this column down and left the two compared panes
82748266
# starting at different heights; moving them to the card's bottom fixed that but
@@ -8294,8 +8286,7 @@ def eval_review_page():
82948286
"<div class=card><h3>When finished</h3>"
82958287
+ ("<p class=sub>Sending in opens the change request(s); merging publishes to Foundry.</p>"
82968288
if all_ok else
8297-
"<p class=sub>If an answer is wrong, put the batch back to pending &mdash; the "
8298-
"corrections are kept.</p>")
8289+
"<p class=sub>If an answer is wrong, return the batch to pending. Corrections are kept.</p>")
82998290
+ "<div class=stepacts>"
83008291
+ (f"<button id=evsend onclick=\"evSend(this)\">Send the batch in</button>"
83018292
if all_ok else
@@ -8476,7 +8467,7 @@ def step(desc, inner):
84768467
# which put it below a rule and read as a caption for the label field rather than as what
84778468
# this card is for. (The line that used to sit here described publishing and had been
84788469
# duplicated from the other card - see #75.)
8479-
"<p class=sub>A local checkpoint that can be returned to. Nothing is shared yet.</p>"
8470+
"<p class=sub>Local checkpoint. Not shared.</p>"
84808471
+ step(
84818472
"",
84828473
# Empty by DEFAULT, not prefilled. A prefilled box asks to be read, edited and
@@ -8487,15 +8478,15 @@ def step(desc, inner):
84878478
"<input id=cmsg value='' placeholder='e.g. identity transcripts, first pass'>"
84888479
"<div class=stepacts>"
84898480
"<button class=sec onclick=\"gitDo('commit')\">Save progress</button>"
8490-
"<button class=sec onclick=\"gitDo('diff')\">Show me exactly what changed</button>"
8481+
"<button class=sec onclick=\"gitDo('diff')\">View pending changes</button>"
84918482
"</div>" + "<div id=githist>" + saves_html + "</div>")
84928483
+ "</div>"
84938484
# The honest division of labour, stated where it is acted on: a verdict is not the
84948485
# deliverable. The knowledge file that stops the agent repeating that answer is, and
84958486
# writing it is the ONE job here that needs an assistant.
84968487
+ "<div class=card>"
84978488
+ "<h3>Publish reviewed transcripts</h3>"
8498-
+ "<p class=sub>Publishing needs an assistant for the knowledge files; the rest is buttons.</p>"
8489+
+ "<p class=sub>Requires an AI-enabled terminal with access to the affected files.</p>"
84998490
+ step("",
85008491
"<ol class=prog id=prog>"
85018492
+ ai_stage
@@ -8542,10 +8533,10 @@ def step(desc, inner):
85428533

85438534
"<details class=card><summary>"
85448535
"<span class=info aria-hidden=true>i</span>"
8545-
"<h3>Worth knowing</h3>"
8536+
"<h3>Reference</h3>"
85468537
"<span class=chev aria-hidden=true></span></summary>"
85478538
"<ul class=sub style='margin:10px 0 0 20px;padding:0'>"
8548-
"<li>A review with nothing to fix is still worth sending.</li>"
8539+
"<li>Reviews with no changes should still be submitted.</li>"
85498540
"<li>Writing what <i>should</i> have been said is the valuable part — a knowledge-file "
85508541
"change is not required.</li>"
85518542
"<li>Suggestions handed to someone else need sending in too; that is how they reach "
@@ -8557,14 +8548,12 @@ def step(desc, inner):
85578548
# stage of it - numbering it first implied you were meant to pass through it every time,
85588549
# and made the first thing on the publish page a way to throw work away.
85598550
"<div class='card dangerzone'>"
8560-
"<h3>Something went wrong?</h3>"
8551+
"<h3>Recovery</h3>"
85618552
"<p class=sub>Not part of the normal flow — only for undoing.</p>"
85628553
"<div class=dzrow><div>"
85638554
"<b>Reset unsaved edits</b>"
8564-
"<div class=sub>Puts edited transcripts back to their last saved state. Only touches "
8565-
"edits not yet saved; anything already saved is untouched, and newly synced "
8566-
"conversations are left alone. Undoable — the edits are set aside rather than deleted, "
8567-
"and the output explains how to put them back.</div>"
8555+
"<div class=sub>Reverts unsaved transcript edits. Saved work and newly synced "
8556+
"conversations are untouched. Recoverable — edits are set aside, not deleted.</div>"
85688557
"</div><div class=dzact>"
85698558
"<button class=sec onclick='resetUnsaved(this)'>Reset unsaved edits</button>"
85708559
"</div></div></div>")

0 commit comments

Comments
 (0)