Skip to content

Promote the multi-line string carry and the router-split items to main - #474

Merged
ptr727 merged 1 commit into
mainfrom
develop
Jul 31, 2026
Merged

Promote the multi-line string carry and the router-split items to main#474
ptr727 merged 1 commit into
mainfrom
develop

Conversation

@ptr727

@ptr727 ptr727 commented Jul 31, 2026

Copy link
Copy Markdown
Owner

Closes #466. Closes #471.

Promotes one squash commit, f7c77d8 (#473). Clean forward merge, no conflicts, nothing main-only in the content diff.

What lands on main

prose_lint carries a multi-line string in every syntax that has one. It carried past the end of a line for the C# verbatim form only, so a shell quote, a heredoc, a PowerShell here-string, and a YAML block scalar each left their markers readable and the comment rules reported on string content. Each syntax now declares what its strings actually do: which quotes delimit and where, which embed the delimiter by doubling it, how they escape, and which forms survive a newline. A YAML run: scalar is deliberately not opaque, since it holds a script whose # lines are exactly the comments the rule governs.

The seven source-side items from the Financial-Modeling router split, including the recast coordination-reference justification (the template repo is public, so the 404 reason was false), OPERATIONS.md in the section model and in the inline-link exception list, GOVERNANCE.md added to that list, spec/audit.py --branch for verifying a convergence before promotion, and the reconciled Financial-Modeling driftNotes.

Both rules that repo offered are promoted into Verification Discipline, and the distinctive-phrase migration guidance is recorded in the section model.

This is a fleet re-vendor

Twelve GOVERNANCE.md verbatim sections change, so every carried repo goes stale against the canonical on merge:

Change Sections touched
The clause-semicolon sweep (32 instances) Branching Model, Release Model, Documentation Style Conventions, PR Review Etiquette, Communicating with the User, Workflow YAML Conventions, Supported Development Platforms, Editor and Tasks, Repository Details, Repository Onboarding and Conformance
Two promoted rules plus the CRLF mechanism Verification Discipline
The reference-style exception list and the recast justification Documentation Style Conventions
The verbatim-sweep rule Documentation Style Conventions

That drift wave is the mechanism working, not a regression. The re-vendor is not tracked by an issue yet, and filing one is not authorized.

Verification

develop CI is green on f7c77d8, and every gate passes locally on the merged state: 159 test cases over scripts/, spec/audit.py --selftest, spec/validate.py, scripts/repo_gate.py, the prose gate, markdownlint, cspell, actionlint, editorconfig-checker, and mypy.

#473 took eleven Copilot rounds and fixed eleven defects, only the first of which arrived as an inline thread. Round seven exposed why: the runbook's documented command for reading the suppressed-findings block keyed on a phrase the current review format does not use, so it matched none of the five rounds that carried one. That fix is in this promotion.

No release fires from this merge: a human promotion to main skips the publisher's actor gate.

🤖 Generated with Claude Code

…t items (#473)

Closes #466. Closes #471.

`prose_lint` carried a string past the end of a line for the C# verbatim form
only, so a shell quote, a heredoc, a PowerShell here-string, and a YAML block
scalar each left their markers readable and the comment rules reported on
string content. Each syntax now declares what its strings do: which quotes
delimit and where, which embed the delimiter by doubling it, how they escape,
and which forms survive a newline. A YAML `run:` scalar is deliberately not
opaque, since it holds a script whose `#` lines are the comments the rule
governs.

The seven source-side items from the Financial-Modeling router split:

- The no-coordination-references rule justified itself with the template repo
  being private. It is public, so the reason is recast onto the grounds that
  hold.
- `OPERATIONS.md` is recorded in the section model, with the topical docs named
  and the content each takes, and added to the inline-link exception list.
- `GOVERNANCE.md` joins that list too, which is what its 51 inline links
  reflect, and the exception is stated as a closed list rather than a category.
- The clause-splicing semicolons are swept out of the verbatim sections, and
  the governing rule is recorded: correct-as-you-next-edit has no downstream
  trigger for verbatim content, so the hub sweeps the class.
- `spec/audit.py --branch` reads a ref other than the registry
  `groundTruthBranch`, so a convergence is verifiable before it is promoted.
- The Financial-Modeling driftNotes are reconciled against a live audit.

Both rules that repo offered are promoted into Verification Discipline, and the
distinctive-phrase migration guidance is recorded in the section model.

The Copilot loop ran eleven rounds and fixed eleven defects, only the first of
which arrived as an inline thread. Round seven exposed the reason: the
documented command for reading the suppressed-findings block keyed on a phrase
the current review format does not use, so it matched none of the five rounds
that carried one. That is fixed in the runbook.

`scripts/test_pr_review.py` covers the one script that had no tests,
`changed_lines` and the `sentence-split` rule get their first cases, and
`spec/audit.py --selftest` runs in CI. Coverage over `scripts/` goes from 87%
to 99%.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings July 31, 2026 13:08

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR promotes the previously-developed changeset into main, spanning the prose linting engine’s multi-line string handling, additional validation/self-test coverage, and several governance/spec updates tied to the router split and verification discipline.

Changes:

  • Extend scripts/prose_lint.py to correctly mask comment markers inside multi-line string constructs across multiple syntaxes (shell, PowerShell, YAML, C#), with substantial new unit test coverage.
  • Add spec/audit.py --branch REF support (via argparse) to verify convergence against a non-registry ref, and run the audit engine self-test in CI.
  • Update governance/spec/docs to incorporate the router-split follow-ups (section model guidance, link-style exception list adjustments, promoted verification rules), plus accompanying registry drift note reconciliation.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
spec/section-model.md Documents destinations for repo-specific extracted content (incl. OPERATIONS.md) and migration guidance.
spec/audit.py Adds --branch override, switches to argparse, and expands self-test coverage.
scripts/test_repo_gate.py Adds CLI-path and failure-mode tests for repo gate behavior.
scripts/test_prose_lint.py Adds extensive tests for multi-line string carrying, syntax dispatch, diff scoping, and sentence-split behavior.
scripts/test_pr_review.py New test module covering pr_review.py’s digest/wait logic and transport contract.
scripts/README.md Updates script docs for new tests and revised prose-lint string-handling model.
scripts/prose_lint.py Implements multi-line string carry model across syntaxes and refines string masking rules.
scripts/pr_review.py Refactors CLI entry to accept argv for testability and adjusts comments.
registry/repos.json Reconciles Financial-Modeling drift notes to reflect converged state.
README.md Updates backlog item to track the next prose-class sweep target.
GOVERNANCE.md Promotes verification discipline rules, updates link-style exception list, and applies prose sweeps/clarifications.
AUDIT.md Documents spec/audit.py --branch usage for pre-promotion convergence verification.
.github/workflows/validate-task.yml Runs new script tests and spec/audit.py --selftest in CI.
.github/copilot-instructions.md Updates suppressed-findings detection guidance to match multiple heading phrasings.
.gitattributes Pins LF for the newly added scripts/test_pr_review.py.

Comment thread scripts/prose_lint.py
@ptr727

ptr727 commented Jul 31, 2026

Copy link
Copy Markdown
Owner Author

Review loop closed

Round 2 re-reviewed the head and returned no new comments. Round 1's single finding was declined with evidence on its thread: quote_after is a character-membership string, not a regex character class, so ':-,[{' contains the sequence dash and - 'item' opens correctly. An existing case already covers it.

Condition State
Formal Copilot review on the head SHA present
Suppressed findings on the head 0
Unresolved threads 0
Merge state MERGEABLE / CLEAN
Required checks both pass
Closing refs #466, #471

Ready for the maintainer to merge. Two mechanics for whoever does it:

  • Merge commit only, which the main ruleset enforces (allowed_merge_methods: merge). Squash or rebase would break the second-parent reference the release model attributes releases from.
  • Never --delete-branch. A promotion PR's head is develop, so that flag deletes the integration branch. Plain gh pr merge 474 --merge.

No release fires from this merge: the publisher is actor-gated and a human promotion to main skips it.

One item deliberately not in this promotion, recorded rather than dropped: leading quote_after with the dash ('-:,[{') to remove the range-lookalike that produced round 1's misreading. Zero behavior change, and it will ride along with the next develop-bound change rather than costing a feature branch, a squash, and a re-promotion now.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 15 out of 15 changed files in this pull request and generated no new comments.

@ptr727
ptr727 merged commit 0a498a6 into main Jul 31, 2026
8 checks passed
ptr727 added a commit that referenced this pull request Jul 31, 2026
The cspell gate reads README.md and HISTORY.md only, deliberately: gating every
markdown file would mean endlessly padding cspell.json with technical terms. That
left a British spelling anywhere else in the tree with nothing checking it, which
is how `labelled`, `behaviour` and `judgement` reached main. The new `spelling`
rule closes the gap and joins the blocking CI prose run, since all three are fixed
here and the tree is clean.

The banned words generate from stems rather than list one by one, since an
inflected spelling is as wrong as its base and a hand-listed family drifts as soon
as one form is added without the others. Two words are deliberately absent:
`analyses` is the US plural of `analysis` as much as a British verb form, and
`cancelled` is a GitHub Actions job status rather than prose.

Outside markdown the rule reads the comments rather than the source lines, reusing
the extraction comment-wrap already does. Judging a source line as prose had this
script report its own table of banned words.

Also leads YAML['quote_after'] with the dash. Membership is a set test, so the
order carries no behavior, but ':-,' reads as a regex range and cost a review
round on #474 when it was read as missing the dash.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.

Financial-Modeling convergence complete: seven source-side items from the router split Carry a multi-line string in the syntaxes that are not C#

2 participants