From 6090f947a2647917e87cb354eb6fd0e7a058291f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 20 Oct 2026 02:48:07 +0000 Subject: [PATCH] Point the status page past the nineteenth prose review. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The latest-round sentence stopped at the nineteenth reconciliation and left that disposition in progress. Name it as the last prose row, copy its review count, and link intake through the twenty-sixth round. Selected κ is unchanged. Co-authored-by: unpaidmoon --- docs/research/current-status.md | 19 +- research/review-round-navigation/README.md | 41 ++++ research/review-round-navigation/SOURCES.json | 66 +++++++ research/review-round-navigation/TASK.json | 67 +++++++ research/review-round-navigation/VERIFY.json | 27 +++ research/review-round-navigation/verify.py | 179 ++++++++++++++++++ 6 files changed, 393 insertions(+), 6 deletions(-) create mode 100644 research/review-round-navigation/README.md create mode 100644 research/review-round-navigation/SOURCES.json create mode 100644 research/review-round-navigation/TASK.json create mode 100644 research/review-round-navigation/VERIFY.json create mode 100644 research/review-round-navigation/verify.py diff --git a/docs/research/current-status.md b/docs/research/current-status.md index 4e0a8b7cda..675afa0126 100644 --- a/docs/research/current-status.md +++ b/docs/research/current-status.md @@ -10,11 +10,18 @@ Cold replay: `make frontier1094-verify`. This local review explicitly reuses the **Reviews since the #1094 selection.** These rounds retain scoped constructions, negative results, audits and tooling with individual credit, without changing the -selected κ. The table records frozen review checkpoints, not live queue counts; -later rounds can revisit older PRs. Use the [PR ledger](pr-ledger.md) for the -current disposition of a specific contribution. The latest recorded round is -the [nineteenth reconciliation](community-efficient1900-review.md); its pending -follow-ups remain separate from incorporated research and supplier admission. +selected κ. The table records frozen prose review checkpoints, not live queue +counts; later rounds can revisit older PRs. Use the [PR ledger](pr-ledger.md) +for the current disposition of a specific contribution. The last prose review +in this table is the [nineteenth reconciliation](community-efficient1900-review.md). +Recorded intake continues through the +[twenty-sixth reconciliation](../../research/community-efficient2600-audit/README.md); +rounds [2000](../../research/community-efficient2000-audit/README.md) through +[2600](../../research/community-efficient2600-audit/README.md) are archive and +tooling intake, not a selected-frontier update. Round 2200's heading says +"final unbatched remainder"; rounds 2300 through 2600 are recorded after it. +Pending obligations in every round stay separate from incorporated research +and supplier admission. | Review | Frozen PR selection | Disposition | | --- | --- | --- | @@ -36,7 +43,7 @@ follow-ups remain separate from incorporated research and supplier admission. | [efficient1600](community-efficient1600-review.md) | #2592–#2715 | 83 merged; 17 pending | | [efficient1700](community-efficient1700-review.md) | #2478, #2716–#2828 | 66 merged; 34 pending | | [efficient1800](community-efficient1800-review.md) | 42 new/revised submissions; 58 earlier follow-ups | 42 merged; 58 pending | -| [efficient1900](community-efficient1900-review.md) | 44 new; four revised; 52 earlier follow-ups | Review in progress; see linked review | +| [efficient1900](community-efficient1900-review.md) | 44 new; four revised; 52 earlier follow-ups | 63 merged; 1 closed as superseded; 36 pending. | > **Below this point every section is a historical snapshot.** Inside them, “current,” > “selected,” “latest” and “next” refer to that snapshot's own checkpoint. The authoritative diff --git a/research/review-round-navigation/README.md b/research/review-round-navigation/README.md new file mode 100644 index 0000000000..984c6c9f33 --- /dev/null +++ b/research/review-round-navigation/README.md @@ -0,0 +1,41 @@ +# Review-round navigation + +**Navigation repair. No new κ.** Selected conditional κ stays `0.001672660197076918`. + +## Scope and evidence + +Original card: `scope-navigation`, scope **refined** to one stale sentence on the status page. + +`docs/research/current-status.md` said the latest recorded round was the nineteenth reconciliation, and its table cell said that round's review was still in progress. The linked nineteenth review already records **63 merged; 1 closed as superseded; 36 pending.** Intake packages `research/community-efficient2000-audit` through `research/community-efficient2600-audit` are on this main. Round 2200's heading is "final unbatched remainder"; rounds 2300 through 2600 are recorded after it. None of those seven openings validates a scientific claim or a new κ. + +The status page now says the nineteenth reconciliation is the last **prose** row in that table, points at the twenty-sixth intake, and copies the nineteenth review's own count into the table. The seven audit READMEs are not rewritten. There is no `community-efficient2000-review.md` through `community-efficient2600-review.md`, and this package does not invent those prose reviews. + +This is not a supplier admission, a ledger rewrite, or a selected-frontier change. + +## Reproduce + +From the repository root, CPython 3.12: + +```sh +python3.12 -B scripts/research_package.py --package research/review-round-navigation +python3 -B -m unittest tests.test_research_current_status +``` + +Expected marker: + +```text +PASS_REVIEW_ROUND_NAVIGATION prose_last=1900 intake_last=2600 counts_1900=63_merged;_1_closed_as_superseded;_36_pending. selected=0.001672660197076918 rounds=7 controls=4 no_new_kappa +``` + +`verify.py` checks the working status page, the pinned nineteenth review, and the seven pinned intake READMEs. Four controls reject the old "latest recorded round" sentence, an in-progress nineteenth disposition, a changed twenty-sixth heading, and a prose review file for round 2600. + +Not run: a selected cold replay, Lean, Docker, or a reread of every later intake row. + +## Open next questions + +1. **Should the prose table grow a row for each intake from 2000 through 2600?** The count lines are already in the audit READMEs. A new row needs a `community-efficientNNNN-review.md` or an explicit decision that an intake README is the review record. This package does not write those reviews. Blocked until a maintainer chooses that record type. +2. **Does `docs/research/research-archive-intake.md` still send publication state only through the nineteenth dispositions file?** That page names `research/community-efficient1900-audit/DISPOSITIONS.json` as the round-disposition authority. Later rounds have their own disposition files. First step: compare one later `DISPOSITIONS.json` with the ledger row for the same PR. Blocked here because editing that index was outside the one stale status sentence. + +## Credit + +The nineteenth reconciliation and the status-page structure through round 1900 are the existing review records, including the navigation refresh that stopped at that round. Rounds 2000 through 2600 keep their authors' intake text. The sentence repair and the checker are by unpaidmoon, with substantial Cursor Grok assistance. Apache-2.0. No independent human review is claimed. diff --git a/research/review-round-navigation/SOURCES.json b/research/review-round-navigation/SOURCES.json new file mode 100644 index 0000000000..bb99c41c45 --- /dev/null +++ b/research/review-round-navigation/SOURCES.json @@ -0,0 +1,66 @@ +{ + "schema_version": 1, + "base_commit": "bb4bccbf42844d2801487450727c2f63e10d1d0f", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "b1fea0c94436b236cc2b7d41a7be032811b94c81", + "sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "67f085acd86acd7d4e03922d9cf4b26bca66fed5", + "sha256": "47b42433f5a85809a3aadd29c2c339da2c6ed728e4f7762df6b88bccb7874cf0" + }, + { + "path": "docs/research/community-efficient1900-review.md", + "usage": "input", + "git_blob": "d71593b69428a03824902c332283153df8216ccd", + "sha256": "3ac6f80fdee8555876236e7c299a16f5fada741ad8a5c8e1c5b836e0ac1a662b" + }, + { + "path": "research/community-efficient2000-audit/README.md", + "usage": "input", + "git_blob": "44a3983f53ac85269fc0d06c2d01439daa421ebe", + "sha256": "6c2d005476cc8fb0b7bbe04cc191ad4439bccd86ecf39cec0165ec768fa4bc5c" + }, + { + "path": "research/community-efficient2100-audit/README.md", + "usage": "input", + "git_blob": "2a864878839486e940318178bb884f71e7c86bb3", + "sha256": "b70d3b1370b176ff6377d540de77c3d5c6c94d2ab1e15806ba3a8da24f5ccbc2" + }, + { + "path": "research/community-efficient2200-audit/README.md", + "usage": "input", + "git_blob": "ea106721e3f9a4c2319e577c18d8a4db5c591b8b", + "sha256": "1c9a1d65532801b9332edbfe8f4c1bd95f90bc46e290091948fc7e58f85a8e06" + }, + { + "path": "research/community-efficient2300-audit/README.md", + "usage": "input", + "git_blob": "feb8ed813e7bd5ebbab8a47adc1a8cd00ac42d98", + "sha256": "ec2deab34c99cf07f43b8ba6585cffc74cd178c145a5a2a934987fc7300217df" + }, + { + "path": "research/community-efficient2400-audit/README.md", + "usage": "input", + "git_blob": "cd282db53833de9177b6a99948646b3440654214", + "sha256": "0569ca993ed72af85bc20904fe4b1a2e13632fc70dbfedfb34502133a471abf8" + }, + { + "path": "research/community-efficient2500-audit/README.md", + "usage": "input", + "git_blob": "81350e6b6714827ed7038e1c32b08aa86268d38e", + "sha256": "a0752cfbd9836821e515aa3584673e06db95102e1dba8a478085a2019eb2e1bb" + }, + { + "path": "research/community-efficient2600-audit/README.md", + "usage": "input", + "git_blob": "494a3434463143e867aade5cbc92d7a2dd9a030c", + "sha256": "3e244cb39516d4d60f7c18ba6c78397ecd23dddf48b96c94e2c54c5ebcbad2a4" + } + ] +} diff --git a/research/review-round-navigation/TASK.json b/research/review-round-navigation/TASK.json new file mode 100644 index 0000000000..adbde1dc13 --- /dev/null +++ b/research/review-round-navigation/TASK.json @@ -0,0 +1,67 @@ +{ + "schema_version": 1, + "task_id": "scope-navigation", + "priority_revision": 6, + "base_commit": "bb4bccbf42844d2801487450727c2f63e10d1d0f", + "original_card": { + "id": "scope-navigation", + "question": "Can one misleading historical-current claim or missing research cross-reference be corrected?", + "starting_points": [ + "docs/research/current-status.md", + "docs/research/pr-ledger.md", + "certificates/selected-result.json" + ], + "methods": [ + "Trace one confusing path from onboarding to its authoritative source.", + "Index one tightly related family of obstructions with explicit excluded and open hypotheses." + ], + "acceptance_gate": "Produce evidence-backed navigation, preserve historical records and avoid a duplicate global survey.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Follow one link from the selected record to its review and compare a potentially stale historical claim.", + "scope": "Positive control / source-bound orientation only; this is not a new construction or full cold replay." + }, + "first_experiment": "Repair one confusing path or produce a scoped map of one related obstruction family.", + "bottleneck_link": "Clear navigation lowers entry cost for central research; a global survey without a concrete fix is not required.", + "allowed_variations": [ + "One historical-current ambiguity or one bounded family index." + ], + "scope_change_triggers": [ + "Rewriting frozen scientific packages just to change their historical wording." + ], + "overlap_terms": [ + "current status", + "historical checkpoint", + "scope navigation" + ] + }, + "scope_status": "refined", + "actual_scope": "The status page called the nineteenth reconciliation the latest recorded round and left its disposition in progress. Record intake packages 2000-2600 as later rounds, copy the nineteenth review's own merged/pending count, and do not rewrite those audit packages.", + "scope_change_reason": "The card allows one historical-current ambiguity. The ambiguity is the status page's latest-round sentence after intake packages 2000-2600 already exist on main.", + "bottleneck_link": "Onboarding reads current-status.md before a card. Stopping at the nineteenth round hides later intake records, and round 2200's final heading is not a stop. This does not change a supplier.", + "budget_minutes": 60, + "stop_rule": "Stop after the two status sentences and the seven intake headings. Do not write prose reviews for rounds 2000-2600 or edit those audit packages.", + "outcome": "completed", + "evidence": "PASS_REVIEW_ROUND_NAVIGATION from research/review-round-navigation/verify.py; tests.test_research_current_status still passes.", + "author": "unpaidmoon", + "ai_assistance": "Cursor Grok 4.7 drafted the status sentence and the checker. The intake headings and counts are the existing README openings.", + "open_questions": [ + { + "question": "Should the prose table grow a row for each intake from 2000 through 2600?", + "why_it_matters": "Readers who only scan the table still stop at the nineteenth row unless they follow the new sentence.", + "first_step": "Decide whether an intake README counts as the review record, then add one row from that README's count line.", + "blocked_by": "There is no community-efficient2000-review.md through community-efficient2600-review.md. Inventing those files would be a new review, not this navigation repair." + }, + { + "question": "Does research-archive-intake.md still point publication state only at the nineteenth dispositions file?", + "why_it_matters": "A second onboarding page can repeat the same stale-round mistake.", + "first_step": "Compare one later DISPOSITIONS.json with the ledger row for the same PR.", + "blocked_by": "That index was outside the one status-page sentence repaired here." + } + ] +} diff --git a/research/review-round-navigation/VERIFY.json b/research/review-round-navigation/VERIFY.json new file mode 100644 index 0000000000..4cd47b23f5 --- /dev/null +++ b/research/review-round-navigation/VERIFY.json @@ -0,0 +1,27 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "docs/research/community-efficient1900-review.md", + "research/community-efficient2000-audit/README.md", + "research/community-efficient2100-audit/README.md", + "research/community-efficient2200-audit/README.md", + "research/community-efficient2300-audit/README.md", + "research/community-efficient2400-audit/README.md", + "research/community-efficient2500-audit/README.md", + "research/community-efficient2600-audit/README.md" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 60, + "checks": "Status page names the nineteenth prose row and the twenty-sixth intake; the nineteenth count matches its review; seven intake headings and count lines match; four synthetic controls reject a stale latest-round sentence, an in-progress disposition, a changed 2600 heading, and a prose review for round 2600." + } + ] +} diff --git a/research/review-round-navigation/verify.py b/research/review-round-navigation/verify.py new file mode 100644 index 0000000000..c90d7e0eb9 --- /dev/null +++ b/research/review-round-navigation/verify.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python3 +"""The status page's latest-round sentence matches intake packages 2000-2600. + +The nineteenth prose review remains the last row of the status table. Later +recorded rounds are archive and tooling intake packages. Round 2200's own +heading says "final unbatched remainder"; rounds 2300-2600 are recorded after +that heading. No selected frontier is changed. +""" + +from pathlib import Path +import json +import re + +ROOT = Path(__file__).resolve().parents[2] +STATUS = ROOT / "docs/research/current-status.md" +REVIEW_1900 = ROOT / "docs/research/community-efficient1900-review.md" +BANNER = "> **Below this point every section is a historical snapshot.**" +OLD_LATEST = "The latest recorded round is" +PROSE_STOP = "The last prose review" +LATEST_LINK = "../../research/community-efficient2600-audit/README.md" +ROUND_2000_LINK = "../../research/community-efficient2000-audit/README.md" + +ROUNDS = ( + (2000, "# Twentieth 100-PR intake", "**50 archived/merged; 50 still open.**"), + (2100, "# Twenty-first 100-PR intake", "**37 archived/merged; 63 still open.**"), + (2200, "# Twenty-second intake: final unbatched remainder", "**63 archived/merged; 22 still open.**"), + (2300, "# Twenty-third100-head intake: research attributes and versions", "**32 archived/merged; 68 still open.**"), + (2400, "# Twenty-fourth 100-head reconciliation", "**19 archived; 81 remain open in this batch.**"), + (2500, "# Twenty-fifth 100-head reconciliation", "**28 archived; 72 remain open in this batch.**"), + (2600, "# Twenty-sixth 100-head reconciliation", "**5 merged; 95 remain open in this batch.**"), +) + + +class NavError(Exception): + pass + + +def current_section(text): + if BANNER not in text: + raise NavError("historical snapshot banner missing") + return text.split(BANNER, 1)[0] + + +def first_bold(text): + match = re.search(r"\*\*(.+?)\*\*", text) + if not match: + raise NavError("no bold count sentence") + return match.group(1) + + +def check_status(text, review_text): + current = current_section(text) + if OLD_LATEST in current: + raise NavError("status page still calls one round the latest recorded round") + if PROSE_STOP not in current or "nineteenth reconciliation" not in current: + raise NavError("status page does not keep the nineteenth prose review as the last table row") + if "twenty-sixth reconciliation" not in current or LATEST_LINK not in current: + raise NavError("status page does not link the twenty-sixth intake") + if ROUND_2000_LINK not in current: + raise NavError("status page does not link the twentieth intake") + if "final unbatched remainder" not in current: + raise NavError("status page does not warn that round 2200's final heading is not a stop") + if "Review in progress" in current: + raise NavError("nineteenth disposition still says review in progress") + counts = first_bold(review_text) + row = next( + (line for line in current.splitlines() if line.startswith("|") and "efficient1900" in line), + "", + ) + if counts not in row: + raise NavError("efficient1900 row does not repeat the review count: " + counts) + for link in (LATEST_LINK, ROUND_2000_LINK): + target = (STATUS.parent / link).resolve() + if not target.is_file(): + raise NavError("missing intake target " + link) + return counts + + +def check_rounds(readme_by_number, prose_review_names): + for number, heading, counts in ROUNDS: + text = readme_by_number.get(number) + if text is None: + raise NavError("missing intake readme " + str(number)) + lines = text.splitlines() + if not lines or lines[0] != heading: + raise NavError("heading mismatch for " + str(number)) + opening = "\n".join(lines[:6]) + if counts not in opening: + raise NavError("count mismatch for " + str(number)) + if "No scientific claim" not in opening: + raise NavError("intake " + str(number) + " does not keep its no-scientific-claim sentence") + prose_name = "community-efficient%d-review.md" % number + if prose_name in prose_review_names: + raise NavError("unexpected prose review for intake " + str(number)) + if "final unbatched remainder" not in readme_by_number[2200].splitlines()[0]: + raise NavError("round 2200 no longer names itself final") + if any(number not in readme_by_number for number in (2300, 2400, 2500, 2600)): + raise NavError("rounds after the 2200 final heading are missing") + + +def selected_decimal_remains(text): + selected = json.loads((ROOT / "certificates/selected-result.json").read_text(encoding="utf-8")) + if "**%s**" % selected["decimal"] not in current_section(text): + raise NavError("selected decimal missing from the current section") + return selected["decimal"] + + +def run_controls(): + review = "**63 merged; 1 closed as superseded; 36 pending.** Frozen.\n" + good = "\n".join([ + "The last prose review", + "in this table is the [nineteenth reconciliation](community-efficient1900-review.md).", + "the [twenty-sixth reconciliation](%s)" % LATEST_LINK, + "rounds [2000](%s) through" % ROUND_2000_LINK, + 'heading says "final unbatched remainder"', + "| [efficient1900](community-efficient1900-review.md) | selection | 63 merged; 1 closed as superseded; 36 pending. |", + BANNER, + ]) + check_status(good, review) + stale = good.replace("The last prose review", "The latest recorded round is the nineteenth. The last prose review") + try: + check_status(stale, review) + except NavError as exc: + if "latest recorded round" not in str(exc): + raise + else: + raise NavError("control accepted the old latest-round sentence") + in_progress = good.replace("36 pending. |", "36 pending. | Review in progress") + try: + check_status(in_progress, review) + except NavError as exc: + if "review in progress" not in str(exc): + raise + else: + raise NavError("control accepted an in-progress nineteenth disposition") + readmes = {number: heading + "\n\n" + counts + " No scientific claim.\n" for number, heading, counts in ROUNDS} + check_rounds(readmes, set()) + broken = dict(readmes) + broken[2600] = "# Twenty-seventh\n\n**5 merged; 95 remain open in this batch.** No scientific claim.\n" + try: + check_rounds(broken, set()) + except NavError as exc: + if "heading mismatch for 2600" not in str(exc): + raise + else: + raise NavError("control accepted a changed twenty-sixth heading") + try: + check_rounds(readmes, {"community-efficient2600-review.md"}) + except NavError as exc: + if "unexpected prose review" not in str(exc): + raise + else: + raise NavError("control accepted a prose review for round 2600") + + +def main(): + status = STATUS.read_text(encoding="utf-8") + review = REVIEW_1900.read_text(encoding="utf-8") + counts = check_status(status, review) + decimal = selected_decimal_remains(status) + readmes = {} + for number, _heading, _counts in ROUNDS: + path = ROOT / ("research/community-efficient%d-audit/README.md" % number) + readmes[number] = path.read_text(encoding="utf-8") + prose = {path.name for path in (ROOT / "docs/research").glob("community-efficient*-review.md")} + check_rounds(readmes, prose) + run_controls() + print( + "PASS_REVIEW_ROUND_NAVIGATION prose_last=1900 intake_last=2600 " + "counts_1900=%s selected=%s rounds=7 controls=4 no_new_kappa" + % (counts.replace(" ", "_"), decimal) + ) + + +if __name__ == "__main__": + try: + main() + except NavError as exc: + raise SystemExit("FAIL_REVIEW_ROUND_NAVIGATION " + str(exc)) from None