transcripto 0.1.2__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: transcripto
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Search everything your coding agents ever did, grade your own prompts, and price your decisions. Local, stdlib-only, your data never leaves the machine.
5
5
  Author: Oscar Morke
6
6
  License: MIT
@@ -29,19 +29,11 @@ your disk and never opens a socket.
29
29
  uvx transcripto coach
30
30
  ```
31
31
 
32
- > **check which build you got.** `trace`, `--harness cursor`, and the "run `index`
33
- > first" errors below all arrive in **0.1.2**. On anything older, `trace` is not a
34
- > command, cursor is rejected, and the index-gated commands fail with a raw sqlite
35
- > traceback instead of an instruction. One line settles which one you are holding:
32
+ > **which build you got.** `uvx transcripto --version` should print **0.1.3**. If `--version`
33
+ > is not a recognised flag at all you are on 0.1.1, which predates `trace`, Cursor support and
34
+ > this README. `uvx --refresh transcripto` forces a fresh resolve past uv's cache.
36
35
  >
37
- > ```
38
- > uvx transcripto --version # 0.1.2 or newer = this README is accurate
39
- > ```
40
- >
41
- > *Read 2026-08-31: PyPI was serving 0.1.1 while this README described 0.1.2, so
42
- > `uvx transcripto` gave the older build. If `--version` is not even a recognised
43
- > flag, you have 0.1.1 — it was added in 0.1.2 precisely because there was no way
44
- > to tell.* The repo always matches this README and needs nothing installed:
36
+ > The repo always matches this README and needs nothing installed:
45
37
  >
46
38
  > ```
47
39
  > git clone https://github.com/Morkeeth/transcripto && cd transcripto
@@ -81,41 +73,48 @@ the same way.
81
73
 
82
74
  ## what you get back
83
75
 
84
- this is a real run on one machine, pasted unedited, 2026-08-28:
76
+ this is a real run on one machine, pasted unedited, 2026-08-31:
85
77
 
86
78
  ```
87
79
 
88
80
  YOUR PROMPT HABITS, GRADED (offline, your machine only)
89
81
 
90
- harness: claude
91
- corpus : 2720 transcript(s), 381,804 records
92
- kept : 3678 prompts you actually typed (0.96% of records)
93
- episodes: 1946 ranked, 910 survived (47%)
94
- tiers : commit 373 | write/edit 537 | reverted 2 | nothing durable 1034
82
+ - your worst looped prompt, with its witness:
83
+ "ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
84
+ NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
85
+
86
+ + your best landed prompt, with its witness:
87
+ "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
88
+ COMMIT-WITNESSED: git commit · corrections: 0
95
89
 
96
90
  SURVIVAL IS A PROXY: survival = a durable Write/Edit or an un-reverted git commit in-episode. A PROXY, not proof the work was correct or shipped.
97
91
 
98
92
  SURVIVES MOST do more of these:
99
- 64% (167/260) detailed (>40 words)
100
- 63% (66/104) states-a-check-or-done-condition
101
- 58% (414/708) intent:CHANGE
102
- 58% (21/36) no-object (pronoun/vague)
103
- 57% (99/175) cites-a-file-or-path
93
+ 65% (71/110) states-a-check-or-done-condition
94
+ 64% (178/276) detailed (>40 words)
95
+ 59% (22/37) no-object (pronoun/vague)
96
+ 59% (451/763) intent:CHANGE
97
+ 57% (106/187) cites-a-file-or-path
104
98
 
105
99
  SURVIVES LEAST these tend to loop:
106
- 33% (4/12) intent:REVERT
107
- 39% (411/1043) intent:none
108
- 40% (4/10) intent:TEST
109
- 42% (298/715) terse (<8 words)
110
- 45% (77/173) intent:DESCRIBE
111
-
112
- + your best landed prompt, with its witness:
113
- "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
114
- COMMIT-WITNESSED: git commit · corrections: 0
115
-
116
- - your worst looped prompt, with its witness:
117
- "ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
118
- NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
100
+ 31% (4/13) intent:REVERT
101
+ 40% (451/1129) intent:none
102
+ 42% (320/765) terse (<8 words)
103
+ 42% (81/192) intent:DESCRIBE
104
+ 45% (5/11) intent:TEST
105
+
106
+ harness claude · 2957 transcript(s), 431,085 records · 3969 typed by you (0.92%)
107
+ episodes: 2108 ranked, 992 survived (47%)
108
+ commit 454 · write/edit 538 · reverted 2 · nothing durable 1114
109
+
110
+ ─────────────────────────────────────────────────────────
111
+ compare yours. numbers only, nothing from your prompts:
112
+
113
+ transcripto coach · claude · 2108 episodes · 47% survived
114
+ states-a-check-or-done-condition 65% (71/110)
115
+ intent:none 40% (451/1129)
116
+ gap 1.6x
117
+ ─────────────────────────────────────────────────────────
119
118
  ```
120
119
 
121
120
  those are my numbers on that date, and they move every session i run, so treat
@@ -11,19 +11,11 @@ your disk and never opens a socket.
11
11
  uvx transcripto coach
12
12
  ```
13
13
 
14
- > **check which build you got.** `trace`, `--harness cursor`, and the "run `index`
15
- > first" errors below all arrive in **0.1.2**. On anything older, `trace` is not a
16
- > command, cursor is rejected, and the index-gated commands fail with a raw sqlite
17
- > traceback instead of an instruction. One line settles which one you are holding:
14
+ > **which build you got.** `uvx transcripto --version` should print **0.1.3**. If `--version`
15
+ > is not a recognised flag at all you are on 0.1.1, which predates `trace`, Cursor support and
16
+ > this README. `uvx --refresh transcripto` forces a fresh resolve past uv's cache.
18
17
  >
19
- > ```
20
- > uvx transcripto --version # 0.1.2 or newer = this README is accurate
21
- > ```
22
- >
23
- > *Read 2026-08-31: PyPI was serving 0.1.1 while this README described 0.1.2, so
24
- > `uvx transcripto` gave the older build. If `--version` is not even a recognised
25
- > flag, you have 0.1.1 — it was added in 0.1.2 precisely because there was no way
26
- > to tell.* The repo always matches this README and needs nothing installed:
18
+ > The repo always matches this README and needs nothing installed:
27
19
  >
28
20
  > ```
29
21
  > git clone https://github.com/Morkeeth/transcripto && cd transcripto
@@ -63,41 +55,48 @@ the same way.
63
55
 
64
56
  ## what you get back
65
57
 
66
- this is a real run on one machine, pasted unedited, 2026-08-28:
58
+ this is a real run on one machine, pasted unedited, 2026-08-31:
67
59
 
68
60
  ```
69
61
 
70
62
  YOUR PROMPT HABITS, GRADED (offline, your machine only)
71
63
 
72
- harness: claude
73
- corpus : 2720 transcript(s), 381,804 records
74
- kept : 3678 prompts you actually typed (0.96% of records)
75
- episodes: 1946 ranked, 910 survived (47%)
76
- tiers : commit 373 | write/edit 537 | reverted 2 | nothing durable 1034
64
+ - your worst looped prompt, with its witness:
65
+ "ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
66
+ NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
67
+
68
+ + your best landed prompt, with its witness:
69
+ "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
70
+ COMMIT-WITNESSED: git commit · corrections: 0
77
71
 
78
72
  SURVIVAL IS A PROXY: survival = a durable Write/Edit or an un-reverted git commit in-episode. A PROXY, not proof the work was correct or shipped.
79
73
 
80
74
  SURVIVES MOST do more of these:
81
- 64% (167/260) detailed (>40 words)
82
- 63% (66/104) states-a-check-or-done-condition
83
- 58% (414/708) intent:CHANGE
84
- 58% (21/36) no-object (pronoun/vague)
85
- 57% (99/175) cites-a-file-or-path
75
+ 65% (71/110) states-a-check-or-done-condition
76
+ 64% (178/276) detailed (>40 words)
77
+ 59% (22/37) no-object (pronoun/vague)
78
+ 59% (451/763) intent:CHANGE
79
+ 57% (106/187) cites-a-file-or-path
86
80
 
87
81
  SURVIVES LEAST these tend to loop:
88
- 33% (4/12) intent:REVERT
89
- 39% (411/1043) intent:none
90
- 40% (4/10) intent:TEST
91
- 42% (298/715) terse (<8 words)
92
- 45% (77/173) intent:DESCRIBE
93
-
94
- + your best landed prompt, with its witness:
95
- "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
96
- COMMIT-WITNESSED: git commit · corrections: 0
97
-
98
- - your worst looped prompt, with its witness:
99
- "ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
100
- NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
82
+ 31% (4/13) intent:REVERT
83
+ 40% (451/1129) intent:none
84
+ 42% (320/765) terse (<8 words)
85
+ 42% (81/192) intent:DESCRIBE
86
+ 45% (5/11) intent:TEST
87
+
88
+ harness claude · 2957 transcript(s), 431,085 records · 3969 typed by you (0.92%)
89
+ episodes: 2108 ranked, 992 survived (47%)
90
+ commit 454 · write/edit 538 · reverted 2 · nothing durable 1114
91
+
92
+ ─────────────────────────────────────────────────────────
93
+ compare yours. numbers only, nothing from your prompts:
94
+
95
+ transcripto coach · claude · 2108 episodes · 47% survived
96
+ states-a-check-or-done-condition 65% (71/110)
97
+ intent:none 40% (451/1129)
98
+ gap 1.6x
99
+ ─────────────────────────────────────────────────────────
101
100
  ```
102
101
 
103
102
  those are my numbers on that date, and they move every session i run, so treat
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "transcripto"
7
- version = "0.1.2"
7
+ version = "0.1.3"
8
8
  description = "Search everything your coding agents ever did, grade your own prompts, and price your decisions. Local, stdlib-only, your data never leaves the machine."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: transcripto
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Search everything your coding agents ever did, grade your own prompts, and price your decisions. Local, stdlib-only, your data never leaves the machine.
5
5
  Author: Oscar Morke
6
6
  License: MIT
@@ -29,19 +29,11 @@ your disk and never opens a socket.
29
29
  uvx transcripto coach
30
30
  ```
31
31
 
32
- > **check which build you got.** `trace`, `--harness cursor`, and the "run `index`
33
- > first" errors below all arrive in **0.1.2**. On anything older, `trace` is not a
34
- > command, cursor is rejected, and the index-gated commands fail with a raw sqlite
35
- > traceback instead of an instruction. One line settles which one you are holding:
32
+ > **which build you got.** `uvx transcripto --version` should print **0.1.3**. If `--version`
33
+ > is not a recognised flag at all you are on 0.1.1, which predates `trace`, Cursor support and
34
+ > this README. `uvx --refresh transcripto` forces a fresh resolve past uv's cache.
36
35
  >
37
- > ```
38
- > uvx transcripto --version # 0.1.2 or newer = this README is accurate
39
- > ```
40
- >
41
- > *Read 2026-08-31: PyPI was serving 0.1.1 while this README described 0.1.2, so
42
- > `uvx transcripto` gave the older build. If `--version` is not even a recognised
43
- > flag, you have 0.1.1 — it was added in 0.1.2 precisely because there was no way
44
- > to tell.* The repo always matches this README and needs nothing installed:
36
+ > The repo always matches this README and needs nothing installed:
45
37
  >
46
38
  > ```
47
39
  > git clone https://github.com/Morkeeth/transcripto && cd transcripto
@@ -81,41 +73,48 @@ the same way.
81
73
 
82
74
  ## what you get back
83
75
 
84
- this is a real run on one machine, pasted unedited, 2026-08-28:
76
+ this is a real run on one machine, pasted unedited, 2026-08-31:
85
77
 
86
78
  ```
87
79
 
88
80
  YOUR PROMPT HABITS, GRADED (offline, your machine only)
89
81
 
90
- harness: claude
91
- corpus : 2720 transcript(s), 381,804 records
92
- kept : 3678 prompts you actually typed (0.96% of records)
93
- episodes: 1946 ranked, 910 survived (47%)
94
- tiers : commit 373 | write/edit 537 | reverted 2 | nothing durable 1034
82
+ - your worst looped prompt, with its witness:
83
+ "ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
84
+ NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
85
+
86
+ + your best landed prompt, with its witness:
87
+ "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
88
+ COMMIT-WITNESSED: git commit · corrections: 0
95
89
 
96
90
  SURVIVAL IS A PROXY: survival = a durable Write/Edit or an un-reverted git commit in-episode. A PROXY, not proof the work was correct or shipped.
97
91
 
98
92
  SURVIVES MOST do more of these:
99
- 64% (167/260) detailed (>40 words)
100
- 63% (66/104) states-a-check-or-done-condition
101
- 58% (414/708) intent:CHANGE
102
- 58% (21/36) no-object (pronoun/vague)
103
- 57% (99/175) cites-a-file-or-path
93
+ 65% (71/110) states-a-check-or-done-condition
94
+ 64% (178/276) detailed (>40 words)
95
+ 59% (22/37) no-object (pronoun/vague)
96
+ 59% (451/763) intent:CHANGE
97
+ 57% (106/187) cites-a-file-or-path
104
98
 
105
99
  SURVIVES LEAST these tend to loop:
106
- 33% (4/12) intent:REVERT
107
- 39% (411/1043) intent:none
108
- 40% (4/10) intent:TEST
109
- 42% (298/715) terse (<8 words)
110
- 45% (77/173) intent:DESCRIBE
111
-
112
- + your best landed prompt, with its witness:
113
- "mTERMINAL 8 — Mountain of Helicon · ~/CODE/mountain-of-helicon Read ~/CODE/mountain-of-helicon. Two…"
114
- COMMIT-WITNESSED: git commit · corrections: 0
115
-
116
- - your worst looped prompt, with its witness:
117
- "ok, and lets see they might solve it in the future so i can go back to my beloeved routine :) Befor…"
118
- NO-DURABLE-RECORD: read-only Bash only, no file change · corrections: 15 · assistant turns: 221
100
+ 31% (4/13) intent:REVERT
101
+ 40% (451/1129) intent:none
102
+ 42% (320/765) terse (<8 words)
103
+ 42% (81/192) intent:DESCRIBE
104
+ 45% (5/11) intent:TEST
105
+
106
+ harness claude · 2957 transcript(s), 431,085 records · 3969 typed by you (0.92%)
107
+ episodes: 2108 ranked, 992 survived (47%)
108
+ commit 454 · write/edit 538 · reverted 2 · nothing durable 1114
109
+
110
+ ─────────────────────────────────────────────────────────
111
+ compare yours. numbers only, nothing from your prompts:
112
+
113
+ transcripto coach · claude · 2108 episodes · 47% survived
114
+ states-a-check-or-done-condition 65% (71/110)
115
+ intent:none 40% (451/1129)
116
+ gap 1.6x
117
+ ─────────────────────────────────────────────────────────
119
118
  ```
120
119
 
121
120
  those are my numbers on that date, and they move every session i run, so treat
@@ -25,7 +25,7 @@ PROG = _prog()
25
25
  # packaging. A stranger who reads the README on GitHub and installs from PyPI can be
26
26
  # holding a different build than the one the README describes, and until this flag
27
27
  # existed there was no way for them to tell which.
28
- VERSION = "0.1.2"
28
+ VERSION = "0.1.3"
29
29
 
30
30
  USAGE = """
31
31
  %(p)s index build / refresh the index (incremental)
@@ -1475,6 +1475,10 @@ def coach(roots=None, harness=None, verified_human=False):
1475
1475
  "durable_rate": round(durable / len(episodes), 3) if episodes else 0.0,
1476
1476
  "tiers": tiers,
1477
1477
  "top_patterns": rankable[:5],
1478
+ # The share block needs named habits by name, and a habit can land in either
1479
+ # half of the most/least split depending on corpus. Give it the whole list
1480
+ # rather than making it guess which slice to look in.
1481
+ "all_patterns": rankable,
1478
1482
  # SURVIVES LEAST must draw only from habits SURVIVES MOST did not take.
1479
1483
  # The old guard was `len(rankable) > 5`, which only protected the <=5 case:
1480
1484
  # with 6-9 rankable habits, rankable[:5] and rankable[-5:] overlap, and the
@@ -1496,6 +1500,37 @@ def coach(roots=None, harness=None, verified_human=False):
1496
1500
  }
1497
1501
 
1498
1502
 
1503
+
1504
+ def _share_block(r):
1505
+ """Four lines a person can paste into a thread.
1506
+
1507
+ The tool asks people to compare their numbers with someone else's; before this
1508
+ existed, answering that meant hand-retyping rows out of two tables, which is
1509
+ why those threads fill with opinions instead of data. Numbers only: no prompt
1510
+ text, no paths, no repo names, so pasting it cannot leak anything.
1511
+ """
1512
+ pats = {p["pattern"]: p for p in r.get("all_patterns") or []}
1513
+ good = pats.get("states-a-check-or-done-condition")
1514
+ bad = pats.get("intent:none")
1515
+ if not (good and bad): # fall back to the extremes we do have
1516
+ top = (r.get("top_patterns") or [None])[0]
1517
+ bot = (r.get("bottom_patterns") or [None])[0]
1518
+ good, bad = good or top, bad or bot
1519
+ if not (good and bad) or good is bad:
1520
+ return # nothing honest to compare
1521
+ W = 57
1522
+ print(" " + "\u2500" * W)
1523
+ print(" compare yours. numbers only, nothing from your prompts:\n")
1524
+ print(" transcripto coach \u00b7 %s \u00b7 %s episodes \u00b7 %d%% survived"
1525
+ % (r["harness"], r["episodes"], int(round(r["durable_rate"] * 100))))
1526
+ for label, p in ((good["pattern"], good), (bad["pattern"], bad)):
1527
+ print(" %-34s %3d%% (%s/%s)"
1528
+ % (label, round(p["survival_rate"] * 100), p["survived"], p["n"]))
1529
+ if bad["survival_rate"]:
1530
+ print(" %-34s %.1fx" % ("gap", good["survival_rate"] / bad["survival_rate"]))
1531
+ print(" " + "\u2500" * W)
1532
+
1533
+
1499
1534
  def _one_line(text, width=100):
1500
1535
  one = " ".join(text.split())
1501
1536
  return one if len(one) <= width else one[:width - 1] + "…"
@@ -1524,22 +1559,18 @@ def cmd_coach(args):
1524
1559
  return
1525
1560
  B, D = "\033[1m", "\033[0m"
1526
1561
  print("\n %sYOUR PROMPT HABITS, GRADED%s (offline, your machine only)\n" % (B, D))
1527
- print(" harness: %s" % r["harness"])
1528
- print(" corpus : %s transcript(s), %s records" % (r["files"], format(r["total_records"], ",")))
1529
- print(" kept : %s prompts you actually typed (%s%% of records)"
1530
- % (r["human_turns"], r["human_pct"]))
1531
- if r["verified_human"]:
1532
- print(" pastes : %s typed turn(s) flagged likely-PASTED and subtracted "
1533
- "(echoes of earlier agent/tool output)" % r["pastes_flagged"])
1534
- if r["history_lines"]:
1535
- print(" codex : history.jsonl ingested: %s/%s of its checkable input "
1536
- "lines also appear as typed rollout turns (gate control)"
1537
- % (r["history_matched"], r["history_lines"]))
1538
- print(" episodes: %s ranked, %s survived (%s%%)"
1539
- % (r["episodes"], r["durable"], int(round(r["durable_rate"] * 100))))
1540
- t = r["tiers"]
1541
- print(" tiers : commit %s | write/edit %s | reverted %s | nothing durable %s"
1542
- % (t["commit"], t["artifact"], t["reverted"], t["none"]))
1562
+ w = r["worst_prompt"]
1563
+ if w:
1564
+ print(" \033[31m-\033[0m your worst looped prompt, with its witness:")
1565
+ print(" \"%s\"" % _one_line(w["opener"]))
1566
+ print(" %s: %s · corrections: %s · assistant turns: %s"
1567
+ % (w["probe"], w["witness"], w["corrective_turns"], w["assistant_turns"]))
1568
+ b = r["best_prompt"]
1569
+ if b:
1570
+ print("\n \033[32m+\033[0m your best landed prompt, with its witness:")
1571
+ print(" \"%s\"" % _one_line(b["opener"]))
1572
+ print(" %s: %s · corrections: %s" % (b["probe"], b["witness"],
1573
+ b["corrective_turns"]))
1543
1574
  print("\n \033[2mSURVIVAL IS A PROXY: %s\033[0m" % r["proxy"])
1544
1575
  if not r["rankable_corpus"]:
1545
1576
  # The refusal IS the product's argument, not an error. A rate needs a
@@ -1572,18 +1603,28 @@ def cmd_coach(args):
1572
1603
  else:
1573
1604
  print("\n \033[2m(every rankable habit is listed above; too few to split "
1574
1605
  "into a most/least pair)\033[0m")
1575
- b = r["best_prompt"]
1576
- if b:
1577
- print("\n \033[32m+\033[0m your best landed prompt, with its witness:")
1578
- print(" \"%s\"" % _one_line(b["opener"]))
1579
- print(" %s: %s · corrections: %s" % (b["probe"], b["witness"],
1580
- b["corrective_turns"]))
1581
- w = r["worst_prompt"]
1582
- if w:
1583
- print("\n \033[31m-\033[0m your worst looped prompt, with its witness:")
1584
- print(" \"%s\"" % _one_line(w["opener"]))
1585
- print(" %s: %s · corrections: %s · assistant turns: %s"
1586
- % (w["probe"], w["witness"], w["corrective_turns"], w["assistant_turns"]))
1606
+ print("\n \033[2mharness %s · %s transcript(s), %s records · %s typed by you "
1607
+ "(%s%%)\033[0m"
1608
+ % (r["harness"], r["files"], format(r["total_records"], ","),
1609
+ r["human_turns"], r["human_pct"]))
1610
+ # Keep the phrasing "episodes: N ranked, M survived (P%)" verbatim. test_small_n.sh
1611
+ # greps for it to prove the raw survival count still shows when habit ranking is
1612
+ # refused, which is the honest half of a small-corpus run. Reword it and that check
1613
+ # goes green-by-absence for a reason unrelated to what it is testing.
1614
+ print(" \033[2mepisodes: %s ranked, %s survived (%s%%)\033[0m"
1615
+ % (r["episodes"], r["durable"], int(round(r["durable_rate"] * 100))))
1616
+ t = r["tiers"]
1617
+ print(" \033[2mcommit %s · write/edit %s · reverted %s · nothing durable %s\033[0m"
1618
+ % (t["commit"], t["artifact"], t["reverted"], t["none"]))
1619
+ if r["verified_human"]:
1620
+ print(" \033[2m%s typed turn(s) flagged likely-PASTED and subtracted\033[0m"
1621
+ % r["pastes_flagged"])
1622
+ if r["history_lines"]:
1623
+ print(" \033[2mcodex history.jsonl: %s/%s checkable input lines also appear as "
1624
+ "typed rollout turns (gate control)\033[0m"
1625
+ % (r["history_matched"], r["history_lines"]))
1626
+ print()
1627
+ _share_block(r)
1587
1628
  print()
1588
1629
 
1589
1630
 
File without changes
File without changes