Skip to content

fix(revise): latest:N counts lanes, not files (#75); v1.1.0 - #128

Merged
CryptoJones merged 3 commits into
mainfrom
fix/revise-latest-n-counts-lanes
Oct 7, 2026
Merged

CryptoJones merged 3 commits into
mainfrom
fix/revise-latest-n-counts-lanes

Conversation

@CryptoJones

@CryptoJones CryptoJones commented Oct 7, 2026 •

Copy link
Copy Markdown
Owner

Closes #75

What changed

  • --revise / --discuss / --synthesize latest:N now resolves to the newest transcripts that together cover N distinct lanes, instead of the last N files. A 12-lane --panel round (one file) and a 12-lane --each run (12 files) are both latest:12; a retried lane counts once. Synthesis transcripts are skipped.
  • The too-few error now says how many distinct lanes across how many files were found, explains panel vs each, and points at latest-run.
  • Semver introduced: __version__ = "1.1.0" and roundtable --version (minor: new flag plus a behaviour fix).
  • install.sh --init: runs roundtable db init when no store exists, never touches an existing one. Verbose errors: fails early naming the fix when there is no pass and no ROUNDTABLE_DB_KEY_FILE (or pass is uninitialised); if db init fails, prints its error plus the command, exit code, Python, store path, key source and common causes. New CI step covers create, leave-alone and the failure message in a throwaway HOME.
  • .gitignore: db restore's *.db.pre-restore-* copies and .playwright-mcp/ session dumps.
  • README, skill/SKILL.md and BACKLOG.md updated.

Tests

python3 -m unittest discover -s tests: 244 tests, OK. New tests cover a panel transcript, a retried lane, synthesis skipping, the error message and --version. test_an_answer_never_loses_to_a_later_failure now names its two files explicitly, since both hold lane A and latest:2 correctly means two lanes.

🤖 Generated with Claude Code

https://claude.ai/code/session_015eWZfxrGjWj2QpwdgFwBjR

Proudly Made in Nebraska. Go Big Red! 🌽 https://xkcd.com/2347/

…1.1.0

latest:N took the last N transcript files, which matched the documented
"N = that run's lane count" only for --each (one file per lane). A --panel
round is one file holding every lane, so latest:12 refused it, and a lane
retried in its own file was counted twice. latest:N now walks newest-first
and takes transcripts until they cover N distinct lanes, skipping synthesis
files. The too-few error names lanes and points at latest-run.

Adds __version__ (1.1.0) and `roundtable --version`.

Closes #75

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015eWZfxrGjWj2QpwdgFwBjR
@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: fb9a1605-12dd-40d2-afc4-6d05d5331553
📥 Commits

Reviewing files that changed from the base of the PR and between f857963 and a90a4da.

📒 Files selected for processing (5)
  • BACKLOG.md
  • README.md
  • roundtable
  • skill/SKILL.md
  • tests/test_roundtable.py

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📜 Recent review details
⏰ Context from checks skipped due to timeout. (4)
  • GitHub Check: test (3.11)
  • GitHub Check: test (3.12)
  • GitHub Check: test (3.13)
  • GitHub Check: test (3.14)
🧰 Additional context used
🪛 ast-grep (0.45.3)
tests/test_roundtable.py

[error] 2363-2364: Command coming from incoming request
Context: subprocess.run([sys.executable, str(ROOT / "roundtable"), "--version"],
capture_output=True, text=True, timeout=30)
Note: [CWE-78] Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').

(subprocess-from-request)

🪛 Ruff (0.16.7)
tests/test_roundtable.py

[error] 2363-2363: subprocess call: check for execution of untrusted input

(S603)


[warning] 2363-2363: subprocess.run without explicit check argument

Add explicit check=False

(PLW1510)


[warning] 2639-2639: Use pytest.raises instead of unittest-style assertRaises

Replace assertRaises with pytest.raises

(PT027)

🪛 SkillSpector (2.11.2)
skill/SKILL.md

[error] 122: [AS1] Agent Config Directory Access: Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.

Remediation: Remove all code or instructions that access agent configuration directories (.claude/, .codex/, .gemini/). If configuration values are needed, pass them explicitly as parameters or environment variables — never read the agent's own config files.

(Agent Snooping (AS1))


[warning] 90: [RA2] Session Persistence: Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Remediation: Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.

(Rogue Agent (RA2))


[warning] 123: [RA2] Session Persistence: Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Remediation: Remove any persistence mechanisms (cron jobs, startup scripts, state files). Skills should not maintain state across sessions without explicit user consent.

(Rogue Agent (RA2))


📝 Summary

Summary by CodeRabbit

  • New Features
    • Added a --version option that displays the program version.
    • --revise latest:N now selects the newest transcripts until they cover N distinct lanes. Panel transcripts can cover multiple lanes, and retries count once.
  • Documentation
    • Clarified --revise latest:N behavior and added a --version usage example.

Walkthrough

latest:N now selects the newest eligible transcripts that cover N distinct lanes. The CLI also provides --version, which prints version 1.1.0.

Changes

Lane-Based Transcript Selection

Layer / File(s) Summary
Select transcripts by lane coverage
roundtable, README.md, skill/SKILL.md, tests/test_roundtable.py, BACKLOG.md
latest:N counts distinct lanes across eligible transcripts, rather than files. The selection skips unreadable or invalid files, synthesis transcripts, and transcripts without lane results. Documentation and tests cover panel runs, retries, and insufficient lane coverage. The backlog marks the issue complete.

Version Output

Layer / File(s) Summary
Expose the program version
roundtable, README.md, tests/test_roundtable.py
The CLI help and README document --version. The option prints roundtable and version 1.1.0. An end-to-end test checks the output against __version__.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to a90a4

latest:N now counts distinct lanes instead of files, and the CLI gains a --version option. Selection behaves as documented, including reaching back to earlier transcripts to recover a retried lane. No merge-blocking issues remain.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The new __version__ value and roundtable --version flag add standalone version-reporting behavior. Issue #75 concerns transcript selection and does not require version reporting. The related READM… Remove the __version__ value, --version flag, and documentation and tests that exist only for version reporting from this PR.
Docstring Coverage ⚠️ Warning Docstring coverage is 45.45% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 11 functions across 1 files. (4 skipped: … Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Issue #75 requires latest:N to count distinct lanes, or to retain file counts with corrected documentation and an explanatory error. The PR implements lane-based selection across transcripts, counts…
Title check ✅ Passed The title clearly summarizes the lane-based latest:N behavior change and the v1.1.0 release.
Description check ✅ Passed The description covers the transcript-selection change, version flag, installation updates, tests, and documentation changes in the pull request.
Full details: Out of Scope Changes check

Explanation

The new __version__ value and roundtable --version flag add standalone version-reporting behavior. Issue #75 concerns transcript selection and does not require version reporting. The related README and tests support this separate feature, not the linked issue.

Full details: Docstring Coverage

Explanation

Docstring coverage is 45.45% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 11 functions across 1 files. (4 skipped: 4 unsupported.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

CryptoJones and others added 2 commits October 6, 2026 22:32
…rors

Opt-in, so a plain install never blocks on a pinentry prompt. Never touches
an existing store. Before db init it fails early, naming the fix, when there
is no pass and no ROUNDTABLE_DB_KEY_FILE, or when pass is not initialised.
If db init itself fails it prints roundtable's own error, then the command,
exit code, Python, store path, key source and the common causes. CI covers
create, leave-alone and the failure message in a throwaway HOME.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015eWZfxrGjWj2QpwdgFwBjR
@CryptoJones
CryptoJones merged commit ef3d95e into main Oct 7, 2026
6 checks passed
@CryptoJones
CryptoJones deleted the fix/revise-latest-n-counts-lanes branch October 7, 2026 03:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

--revise latest:N counts files, not lanes; wrong for --panel rounds

1 participant