Skip to content

feat(revise): decide in the group's own words; answer how a proposal came about - #128

Merged
mmaclay merged 13 commits into
mainfrom
feat/65-discuss-on-pr
Nov 7, 2026
Merged

mmaclay merged 13 commits into
mainfrom
feat/65-discuss-on-pr

Conversation

@mmaclay

@mmaclay mmaclay commented Nov 7, 2026

Copy link
Copy Markdown
Member

Closes #65

Origin: #65. The group had to decide on a local Markdown file, typing a fixed verdict on each proposal's Mark: line. A verdict given in the draft pull request's review counted only once someone copied it in, and nobody could ask how a proposal came about without reading the harvest by hand.

Sandbox: Sonnet, --check, the sandbox's widgets repository, synthetic data (sandbox/fixture/discuss/).

  • revise-apply-settle-marks: the group discussed four proposals in its own words. 4 of 4 runs on the final skill text, and 4 of 4 on the commit before it, settled them correctly:

    • R-004 to accept, reworded with the whole agreed sentence;
    • F-002 to accept, from the meeting notes;
    • D-001 to unclear, two people with no outcome;
    • F-001, a change to a live convention that names no owner, to unclear.

    Each run left the chat note pasted for prepare alone, and wrote nothing before the yes. Earlier batches on earlier text led to three fixes:

    • runs shortened the table to a sentence, so it now goes to .review/revision/marks.md;
    • two pattern false positives were fixed;
    • one run with no clone tried gh to find a pull request, so the text now says there is none to look for.
  • revise-question-evidence: "How did R-004 come about, and what does D-001 rest on?" 8 of 8 saved runs pass the final checks across four commits:

    • each traced R-004 through cluster C1 to alice's comment and bob's reply in the capture;
    • each said pull request 9 has no capture rather than describing it.

Canary: the next revision.

  • apply should write .review/revision/marks.md and show it before asking.
  • Each Mark: line it writes should have a discussed: line beneath it.
  • ratchet-YYYY-MM.clusters.txt should sit beside the report.
  • /lasp-dev:revise <a question> should answer with links into the captures.

Failures to look for:

  • a decision settled from an agent's 5/5 reply;
  • a proposal the group argued over settled to accept rather than unclear;
  • a question answered from last month's report.

What changes

The group discusses each proposal however it likes; apply turns that into the fixed marks it already acted on, and the driver confirms them before anything is written.

Before Now
A verdict typed in fixed form on the Mark: line Discussion in any words: the Mark: line, review comments and replies on the draft pull request (when the standard is in a clone), or meeting notes pasted into .review/revision/meeting/
apply reads the Mark: lines only apply reads all of it, settles each proposal to a mark or unclear, writes the table to .review/revision/marks.md, and writes the marks into the report on the driver's yes, keeping the group's words on a discussed: line
Agreed new wording had to be re-proposed accept, reworded: "<the whole new wording>", with override: or owner: when the proposal needs one; the bar lints the new words, and an override waives only the gate the proposal was held on (standards/rule-bar.md, "Overrides")
No way to ask how a proposal came about /lasp-dev:revise <a question> (skills/revise/discuss.md) answers from the report, the clusters printout now kept beside it, and each pull request's capture, citing the comments, and says which link is missing; a question on the pull request gets a drafted reply posted only on a yes

Settling is deliberately conservative:

  • Only people's words decide. A reply a person read before posting counts as theirs; a bot's, a 5/5 agent reply, and revise's own answers do not.
  • A proposal settles to unclear when:
    • its sources disagree;
    • people disagree with no outcome;
    • an accept lacks the override reason a held proposal needs, or the owner a live data convention needs.
  • When the pull request's threads can't be read, apply asks whether to paste them, go on without them, or stop.
  • Meeting notes go in .review/revision/meeting/, so an ask pasted for prepare into revision/notes/ is never taken for a decision.

Files:

  • Skills:
    • skills/revise/apply.md ("Settle the marks", the reworded rule, the step 2 lint and budget lines);
    • skills/revise/discuss.md, new;
    • SKILL.md, 2.26.0 (description, argument hint, The marks, Files, Never);
    • prepare.md (step 10 writes the clusters file, the pull request's description, Next);
    • outline.md.
  • Standard: standards/rule-bar.md, "Overrides" with new words.
  • Docs:
    • GUIDE.md;
    • docs/design.md, a paragraph on why;
    • docs/contracts.md, the clusters printout kept;
    • the README's revise row and .review/ table (revision/marks.md, revision/meeting/);
    • ROADMAP.md: the landed row removed; a draft pull request for a standard kept in its own repository deferred.
  • Sandbox and tests: two scenarios, the fixture sandbox/fixture/discuss/, and the scenario count in tests/test_sandbox.py.

Not changed: no script parses Mark:, so no contract version moves. apply's rules for archiving, the lint, held candidates and tickets act on the settled marks as before.

Review

Three rounds, each a fresh adversarial reviewer:

  • Round 1: 2 blocking findings, fixed.
    • A question asked alone could read last month's report from the standard's main. It now reads the revision branch, and says so when the month has no report.
    • Notes pasted before prepare could be read as meeting decisions. Meeting notes now have their own directory.
    • Also fixed:
      • composite marks;
      • stopping when the threads cannot be read;
      • the people-only rule stated inline;
      • the clusters file rerun at step 10 and committed in the no-clone path;
      • leftover wording;
      • tighter scenario checks.
  • Round 2: 0 blocking, 6 should-fix, fixed.
    • The group's words are kept under the mark.
    • When the threads cannot be read, apply asks instead of stopping.
    • Reworded-with-override proposals are linted.
    • reworded is limited to proposals with wording.
    • Other repositories' captures are found.
    • A comment is placed by its hunk, not the head's line numbers.
  • Round 3: 0 blocking, 5 should-fix, fixed.
    • reworded holds the whole wording.
    • Every written mark carries discussed:, so a rerun treats it as settled.
    • The budget line now matches the reworded-override rule.
    • rule-bar.md owns the narrower override.
    • A reply a person read counts as theirs, per docs/design.md.
    • The README row is updated.

Checks on the final commit: the unit suite (1,261 tests), the five shell tests, check_static.py and codespell all pass.

Decisions for the maintainer

  • No draft pull request when the standard is the repository's own. revise never opens this repository's pull request, so in that case the group discusses on the Mark: lines or in pasted meeting notes. It's deferred in ROADMAP.md.
  • The fixed marks stay, as what discussion settles to. apply's rules on overrides, owners and held candidates hang on them, and the report stays the record of what was decided.
  • No vote count. The discussion informs a mark the driver confirms; a split with no outcome is unclear, not a tally.
  • The clusters printout is committed beside the report (ratchet-YYYY-MM.clusters.txt), so a question in a later session, or from someone else, can be traced to its cases.

🤖 Generated with Claude Code. AI assistance level: 5/5 (not read by a person).

mmaclay and others added 12 commits November 7, 2026 10:07
…came about

apply reads the discussion (Mark lines, the draft pull request's threads,
pasted notes) and settles each proposal's mark for the driver to confirm.
A question about a proposal is answered from the report, the clusters
printout now kept beside it, and each pull request's capture.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…page scenario's says lines with it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t read from its branch, people-only and conflicting sources unclear, composite marks, clusters rerun at step 10

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…_says; apply looks for no pull request without a clone

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ark, ask when threads cannot be read, lint reworded overrides, reworded only where there is wording, other repositories' captures, comments placed by their hunk

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nly inside it

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…stion

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…re the yes; the scenario checks that file

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…an option line matched

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…led mark always carries discussed:, override waives only the held gate in rule-bar, a person-read reply counts, README row

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d; accept more ways of saying a capture is missing

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mmaclay
mmaclay marked this pull request as ready for review November 7, 2026 18:16
@mmaclay
mmaclay merged commit 006cf11 into main Nov 7, 2026
1 check passed
@mmaclay
mmaclay deleted the feat/65-discuss-on-pr branch November 7, 2026 18:29
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: decide the marks on the pull request, not a local markdown file

1 participant