Skip to content

Normalize Oxford spelling and narrow exemptions - #709

Merged
leynos merged 3 commits into
mainfrom
harden-lint-spelling
Oct 11, 2026
Merged

leynos merged 3 commits into
mainfrom
harden-lint-spelling

Conversation

@leynos

@leynos leynos commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

Summary

This branch corrects Oxford -ize spellings in Rust diagnostics, test fixtures
and an authored guide example. It renames a private pool-test field and parameter
while retaining the published test-helper identifiers. Obsolete spelling
exemptions are removed; fixed public names, historical API references and the
tooling layer's mold command exemptions remain. Because one corrected string
is a public error's rendered text, the users' guide now records which part of
the SendError Display output is a stable contract.

This is the spelling layer after Phase 1b (#708). Structural module moves and source-level lint waves follow in separate layers.

Review walkthrough

Validation

On current head fc8ca8a92f54394e471b5f4bd5084866737d541e, restacked onto
main at a530389, an independent Scrutineer ran the repository's
own-configuration gates sequentially with tee logs under
/tmp/pr709-restack-20261011/:

Gate Result Exit Wall
make check-fmt pass 0 5 s
make spelling pass 0 7 s
make lint pass 0 160 s
make typecheck pass 0 5 s
make test pass 0 34 s
make test-doc pass 0 77 s
make test-workflow-contracts pass 0 6 s
make markdownlint pass 0 18 s
make nixie pass 0 2 s
make formal-pr pass 0 8 s
mbake validate Makefile pass 0 1 s

make check-fmt also covers mdtablefix over 118 files. make lint runs the
rustdoc build, cargo clippy with warnings denied, and Whitaker over all
targets and features. make test ran the full workspace suite: 81 test
binaries, 1,222 tests passed, 0 failed and 0 ignored, including the trybuild
compile-fail cases. The run reused a warm target directory, so its wall time
is not comparable to a cold run; the test binaries it executed were built from
this head's sources. make test-doc passed 216 doctests with four ignored
across wireframe, wireframe_loom and wireframe_verification;
make test-workflow-contracts passed 243 contracts. make formal-pr passed
its 52 test-verification tests; its kani and verus phases are the
repository's deliberate FORMAL-SKIP roadmap stubs (roadmaps 15.3.1 and
15.5.x) and execute no harnesses, so no formal-verification evidence is claimed
for this candidate. No gate was skipped or suppressed.

Several gates rebuilt uncached, because the managed sccache server was
unreachable throughout the run. Per the build standard that is a cache state,
not a build failure; every compile still went through the shared admission
pool. The wall times above are therefore not cold-build times: gates run after
a shared target directory was populated reuse it, which is why make test
(34 s) and make formal-pr (8 s) are shorter here than on a cold tree. The
binaries executed were built from this head's sources, which predate every
cache artifact reused.

Hosted CI

The hosted checks were re-observed on fc8ca8a. The required check
build-test passed in 8m37s, including the Format, Lint, Markdown lint,
en-GB-oxendict spelling, Mermaid and workflow-contract steps and the coverage
ratchet; CodeQL's Analyze (actions|python|rust) jobs passed; CodeScene,
Gecko and the CodeQL summary check passed. automerge, Kody Code Review
and Sourcery review report skipped by design (Dependabot-only, and
unconfigured providers) rather than pending. No check was cancelled, timed out
or blocked.

Restack and rebase evidence

The branch previously sat on the pre-squash origin/main lineage and showed
CONFLICTING/DIRTY because 28 commits, including #708's
squash 3f6a608 and the typos-tooling changes in #727/#754,
had landed on main since. The two branch-owned commits were replayed onto
main at a530389 with an explicit exclusive boundary of 5e85f6a (the last
inherited #708 head commit), not the topology merge-base.

Identity Commit
target (main) a530389f2f6528d0fc949101107a1e5154421c55
exclusive base 5e85f6ae4ec4 (#708 head)
previous head fc7c3a49877ae13ae02e1ce5c331baa5217ff904
new head fc8ca8a92f54394e471b5f4bd5084866737d541e

git range-diff 5e85f6a..fc7c3a4 a530389..c9dd178 reports commit 2 as an exact
= match. Commit 1 differs only where the generated/input spelling pair had to
be reconciled, and the difference is positional: the added/removed line
multisets are identical for typos.local.toml (4 added / 28 removed),
docs/developers-guide.md (6 added / 6 removed) and the 35-pattern generated
typos.toml (21 removed), and all twelve target-only paths in the diff are
byte-identical to their pre-restack state.

The net branch diff is unchanged and still 12 paths, +28/−71. git diff --check
is clean, and the only repeated-block hit is the intended 4→8 occurrence
correction of "state not initialized" in tests/fixtures/message_assembly.rs.

Generator and probe reproduction

The pinned typos-config-builder v0.1.3 gate regenerated the tracked
typos.toml from typos.local.toml and the live shared en-GB-oxendict
dictionary. Two consecutive runs produced a stable SHA-256
5c48d693c38aa0817df5071c10ee72c5766742f0bc9c0bf840bad8f3df585e84, and the
second reported current: typos.toml.

Both narrowing probes were re-run against the same live dictionary:

  • an API-context BackoffConfig::normalised passed, because the exemption is
    the exact former-public-method form rather than the bare stem;
  • the same spelling in ordinary prose failed with
    error: `normalised` should be `normalized` at
    docs/developers-guide.md:1454.

Notes

The second commit asserts the complete public SendError::Serialize Display
string, which addresses CodeRabbit's valid diagnostic-test finding. Its
additional drive_with_payloads request concerns a string constructed only by
a test-body map_err after the helper returned, so it is not a helper output
contract.

The branch retains an automatic review approval from
coderabbitai at fc7c3a4. Because a restack creates a new candidate, that
approval is historical evidence for the old head, not merge eligibility for
fc8ca8a. After the restack, CodeRabbit's commit status reported "Review
paused" rather than a rate limit, so a review was dispatched through the
managed queue for head c9dd178; it completed at 02:23:35Z and raised exactly
one valid finding, the undocumented User-Facing Documentation contract.
Commit fc8ca8a addresses it, satisfies the repository's "update the users'
guide for user-facing changes" rule, and a reconciliation reply has been
posted. fc8ca8a changes documentation only, so the c9dd178 CI results
remain applicable to the code under test, and hosted checks were re-observed
green on fc8ca8a. A confirmation review for fc8ca8a is queued.

The revised B build-routing guidance and this layer's spelling guidance both
survive in separate developer-guide sections. Concordat #203 repaired CV-005
upstream, but this repository's run remains pinned to 8a2c99c pending an
explicit re-pin decision; BD-001/002 and CV-005 remain recorded selected-canon
conflicts.

References

Summary by Sourcery

Normalize Oxford spelling throughout the project while preserving necessary public and tooling-specific exceptions.

Bug Fixes:

  • Correct Oxford -ize spellings across diagnostics, fixtures, documentation, and testing examples.
  • Document and verify the stable SendError display prefixes, including the corrected serialization error wording.

Enhancements:

  • Rename private pool-test state to Oxford spelling while preserving published helper identifiers.
  • Narrow spelling-tool exemptions to documented public names, fixed syntax, external-tool references, and historical API references.

Documentation:

  • Clarify spelling-exception policy and document stable SendError diagnostic prefixes for users.

Tests:

  • Strengthen response-error coverage by asserting the complete serialization diagnostic string.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Team
  • Run ID: 59b15d68-8837-4d03-8201-1e0bd6f91a1b

📥 Commits

Reviewing files that changed from the base of the PR and between c9dd178 and fc8ca8a.


📒 Files selected for processing (1)
  • docs/users-guide.md

🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:


Included review availability: This review used your included allowance. 2 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.



Summary

  • Normalize Oxford -ize spellings in Rust diagnostics, test fixtures, guide examples, and test-helper error messages.
  • Rename the private pool-test field and parameter to behaviour. Keep the published test-helper identifiers unchanged.
  • Remove obsolete spelling exemptions. Retain narrow exemptions for fixed public names, historical API references, and the tooling layer’s mold command.
  • Update the developer guide to document when spelling exemptions are appropriate.
  • Assert the exact display text serialization error: Other("fail") for SendError::Serialize.
  • Document the stable SendError::Display prefixes in the users’ guide. Distinguish them from trailing source error text.
  • Align the spelling and documentation changes with the vocabulary-normalization approach in docs/execplans/vocabulary-normalization.md. No new ExecPlan document was added.

Validation

The author reports that the listed formatting, spelling, lint, test, typecheck, workflow-contract, and documentation gates passed on the stated head. The author reports that make test ran 1,222 tests across 81 binaries. The author also reports stable generated spelling configuration and passing spelling-narrowing probes.

The author reports that make formal-pr ran kani and verus roadmap stubs without harnesses. This provides no formal-verification evidence.

CodeRabbit reports that the failed to deserialize envelope text is constructed by a test body after drive_with_payloads returns. Malformed helper input would not test that diagnostic contract. CodeRabbit also reports that GitHub showed build-test successful, but it did not rerun repository gates.

Walkthrough

The change updates spelling-policy guidance and typo-checker exclusions. It renames pool-server behaviour identifiers and updates spelling in error messages, tests, and examples. One response-error test now checks the exact display text.

Changes

Spelling consistency

Layer / File(s) Summary
Spelling policy and exclusions
docs/developers-guide.md, typos.local.toml, typos.toml
The guide updates documented spelling exceptions. The typo-checker configurations add and remove exclusions for pool-server names, CI and Tokio syntax, and related text.
Pool-server naming and spelling updates
src/test_helpers/pool_client.rs, src/app/error.rs, docs/rstest-bdd-users-guide.md, tests/*, wireframe_testing/README.md, wireframe_testing/src/helpers/tests/helper_tests.rs, docs/users-guide.md
The pool-server field and parameter now use behaviour. Error messages, test fixtures, examples, and error documentation receive spelling updates without changes to their conditions or control flow. A response-error test asserts the exact serialization error text.

Priority: ⬇️ Low

Change: Other

Merge Risk: ⚪ Minimal · up to fc8ca

The changes correct spelling in diagnostics, examples, and test names. The documented error prefixes match the implementation, and the changed serialization message is asserted; no material runtime or compatibility risk remains evident.

Pre-merge checks | Passed 15
✅ Passed checks (15 passed)
Check name Status Explanation
Title check Passed The title accurately summarises the main changes: correcting Oxford spelling and narrowing spelling-tool exemptions. No roadmap item or issue requires inclusion in the title.
Description check Passed The description directly explains the spelling corrections, preserved public identifiers, narrowed exemptions, documentation changes, tests, and validation results.
Docstring Coverage Passed Docstring coverage is 83.33% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 12 functions across 7 files. (1 skipped: 1 …
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Testing (Overall) Passed Accept the test coverage. The changed SendError::Serialize display contract is exercised by tests/response/response_errors.rs:201-209: FailingResp forces the real serialization path through `sen…
User-Facing Documentation Passed Accept this documentation change. The PR changes the public SendError::Serialize display prefix to serialization error: in src/app/error.rs:12-15. It documents the stable Display prefixes for …
Developer Documentation Passed Pass. The pull request changes spelling, private test-fixture identifiers, spelling exceptions, and a public diagnostic string. It introduces no new internal API, architectural boundary, abstraction, …
Module-Level Documentation Passed PASS. The pull request does not add or remove modules. Every changed Rust module already has a module-level //! docstring: src/app/error.rs:1, src/test_helpers/pool_client.rs:1, `tests/extractor…
Testing (Unit And Behavioural) Passed The pull request adds an exact assertion for the changed SendError::Serialize display text in tests/response/response_errors.rs:203-212. This test drives the public WireframeApp::send_response b…
Testing (Property / Proof) Passed PASS: The pull request introduces spelling corrections, private identifier renames, spelling-configuration changes, and a fixed SendError::Serialize display assertion. The documented display contrac…
Testing (Compile-Time / Ui) Passed Accept the testing coverage. The pull request changes no public type or signature and does not introduce compile-time behaviour, so no new trybuild case is required. The changed runtime `SendError::Se…
Unit Architecture Passed Pass this check. The pull request changes spelling, documentation, spelling exemptions, a private fixture-field name, and one exact display assertion. The PoolTestServer rename preserves the publish…
Domain Architecture Passed PASS. The pull request does not introduce domain or boundary changes. The diff contains spelling-only edits, documentation and spelling-configuration updates, one exact SendError::Serialize display …
Observability Passed Treat this check as passed. The diff changes spelling, documentation, spelling configuration, test fixtures, and a private test-server field. It adds one exact assertion for the existing `SendError::S…


Spelling patterns align in flight
Behaviour names now read right
Error words use one clear way
Tests check the text they display
Docs record the contract bright

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

@sourcery-ai

sourcery-ai Bot commented Sep 23, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

This spelling-focused PR converts ordinary Oxford -ise/-ised text to -ize/-ized, renames only private pool-test identifiers, and simplifies Typos exemptions to protect published APIs, historical references, fixed syntax, and tooling names while allowing obsolete exceptions to be removed.

File-Level Changes

Change Details Files
Normalize Oxford spelling in user-facing diagnostics, fixtures, documentation, and examples.
  • Correct serialise/initialised variants to serialize/initialized in Rust errors, test fixtures, helper output, and README examples.
  • Update the authored rstest-BDD guide example to use initialized.
  • Retain fixed or externally significant spellings such as tool names and historical API references.
src/app/error.rs
tests/extractor.rs
tests/fixtures/fragment/mod.rs
tests/fixtures/message_assembly.rs
docs/rstest-bdd-users-guide.md
wireframe_testing/src/helpers/tests/helper_tests.rs
wireframe_testing/README.md
Narrow spelling-tool exemptions while preserving the remaining public and tool-specific exceptions.
  • Replace source-fragment exemptions for private behavior usages and corrected text with exact public identifier patterns.
  • Retain exemptions for PoolServerBehavior, start_with_behavior, BackoffConfig::normalised, RFC generic-bound fragments, CI/Tokio syntax, and mold command forms.
  • Regenerate the tracked Typos configuration from the local spelling input.
typos.local.toml
typos.toml
docs/developers-guide.md
Rename private pool-test state and parameter spellings without changing the published helper API.
  • Rename the internal PoolServerState field and related local parameter/uses from behavior to behaviour.
  • Keep the public PoolServerBehavior type and start_with_behavior entrypoint unchanged via targeted spelling exemptions.
src/test_helpers/pool_client.rs
typos.local.toml
typos.toml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

codescene-access[bot]

This comment was marked as outdated.

@leynos
leynos added this pull request to stack #707 September 23, 2026 21:59
@leynos
leynos marked this pull request as ready for review September 23, 2026 22:17

@sourcery-ai sourcery-ai Bot 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.

Sorry @leynos, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 12 hours and 35 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-24T07:59:11.967366Z fc7c3a4 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai coderabbitai Bot 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.

Pre-merge checks failed. Please resolve the failing checks before merging.

@leynos
leynos marked this pull request as draft September 24, 2026 03:33
@leynos
leynos force-pushed the harden-lint-spelling branch from 4fb23ee to 1a49f81 Compare September 24, 2026 03:42
codescene-access[bot]

This comment was marked as outdated.

@leynos
leynos force-pushed the harden-lint-spelling branch from 1a49f81 to 5979cf2 Compare September 24, 2026 04:47
codescene-access[bot]

This comment was marked as outdated.

@leynos
leynos marked this pull request as ready for review September 24, 2026 05:04

@sourcery-ai sourcery-ai Bot 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.

Sorry @leynos, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 5 hours and 48 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

leynos commented Sep 24, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai Have the following failed checks now been resolved?

If further work is required, please provide an AI agent prompt for the remaining work to be done to address these failures.

Do not treat warnings as optional or aspirational.

Previously failed pre-merge check

Check name Previous status Current-head disposition
Testing (Overall) Error: no exact assertion for the public SendError::Serialize diagnostic; requested malformed-input coverage for a failed to deserialize envelope string. On current head 5979cf2a35d6b5dde2bf8914db5f4d5034345c82, separate review-fix commit 5979cf2 adds an exact assertion that SendError::Serialize displays serialization error: Other("fail") in tests/response/response_errors.rs, and the focused response test and full repository gates pass. The other requested literal is constructed by wireframe_testing/src/helpers/tests/helper_tests.rs in a test-body map_err after drive_with_payloads returns; the helper itself lives in wireframe_testing/src/helpers/payloads.rs and cannot emit that literal. A malformed helper input test would not cover a public diagnostic contract. Please assess the corrected current PR head and this source boundary.

@coderabbitai

coderabbitai Bot commented Sep 24, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
printf 'HEAD: '; git rev-parse HEAD
printf 'PR metadata:\n'
gh pr view 709 --repo leynos/wireframe --json headRefOid,state,statusCheckRollup --jq '{headRefOid,state,checks:(.statusCheckRollup | map({name,conclusion,status,detailsUrl}))}' || true
printf '\nCandidate outlines:\n'
for f in src/app/error.rs tests/response/response_errors.rs wireframe_testing/src/helpers/tests/helper_tests.rs wireframe_testing/src/helpers/payloads.rs; do
  echo "== $f =="; ast-grep outline "$f" --items all --match 'SendError|serialize|drive_with_payloads|envelope|response_errors' || true
done
printf '\nRelevant snippets:\n'
rg -n -C 5 -F -e 'serialization error: Other("fail")' -e 'SendError::Serialize' -e 'failed to deserialize envelope' -e 'drive_with_payloads(' src/app/error.rs tests/response/response_errors.rs wireframe_testing/src/helpers/tests/helper_tests.rs wireframe_testing/src/helpers/payloads.rs || true
printf '\nCommit summary:\n'
git show --stat --oneline --no-patch 5979cf2 || true

Length of output: 7489


🏁 Script executed:

#!/bin/bash
set -euo pipefail
printf 'Review-fix commit:\n'
git show --format=medium --no-ext-diff -- tests/response/response_errors.rs | head -110
printf '\nSendError declaration:\n'
sed -n '1,55p' src/app/error.rs
printf '\nResponse test relevant ranges:\n'
sed -n '130,245p' tests/response/response_errors.rs
printf '\nHelper test relevant ranges:\n'
sed -n '35,100p' wireframe_testing/src/helpers/tests/helper_tests.rs
printf '\nPayload helper relevant ranges:\n'
sed -n '34,120p' wireframe_testing/src/helpers/payloads.rs

Length of output: 13864


@leynos Treat the Testing (Overall) finding as resolved on PR head 5979cf2a35d6b5dde2bf8914db5f4d5034345c82.

tests/response/response_errors.rs now checks the SendError::Serialize variant and asserts the exact public diagnostic: serialization error: Other("fail"). The failed to deserialize envelope text comes from a map_err in wireframe_testing/src/helpers/tests/helper_tests.rs, after drive_with_payloads returns. It is not a diagnostic emitted by drive_with_payloads, so malformed helper input would not test that public diagnostic contract.

GitHub reports build-test as successful on this head. I did not rerun the repository gates. No further work is required for this finding, so there is no remaining-work agent prompt. This conclusion does not waive any separate warning or audit.


✏️ Learnings added
Learnt from: leynos
URL: https://github.com/leynos/wireframe/pull/709

Timestamp: 2026-09-24T05:05:21.395Z
Learning: In `leynos/wireframe`, `wireframe_testing/src/helpers/tests/helper_tests.rs` constructs `failed to deserialize envelope` in a test-body `map_err` after `drive_with_payloads` returns. `wireframe_testing/src/helpers/payloads.rs` does not emit that literal; malformed input to the helper does not test the public `SendError::Serialize` diagnostic contract.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@leynos
leynos removed this pull request from stack #707 September 24, 2026 05:19
@leynos
leynos added this pull request to stack #715 September 24, 2026 05:20
@leynos
leynos marked this pull request as draft September 24, 2026 07:29
@leynos
leynos force-pushed the harden-lint-spelling branch from 5979cf2 to fc7c3a4 Compare September 24, 2026 07:40
codescene-access[bot]

This comment was marked as outdated.

@leynos
leynos marked this pull request as ready for review September 24, 2026 07:56

@sourcery-ai sourcery-ai Bot 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.

Sorry @leynos, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 2 hours and 56 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@buzzybee-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Base automatically changed from test-quality-fallible-assertions to main September 27, 2026 17:30
@sourcery-ai sourcery-ai Bot mentioned this pull request Oct 8, 2026
leynos added 2 commits October 11, 2026 03:22
Correct diagnostic and test text that used -ise forms where Oxford
English requires -ize. Rename the private pool-test behaviour field
while preserving published helper identifiers.

Remove obsolete Typos exemptions for the corrected text and private
names, regenerate the tracked configuration, and document the remaining
fixed external spellings.
Check the exact `SendError::Serialize` diagnostic in the existing
response encode-error test. This guards the public spelling change
against regression while preserving the error variant check.
@leynos
leynos force-pushed the harden-lint-spelling branch from fc7c3a4 to c9dd178 Compare October 11, 2026 01:41
codescene-access[bot]

This comment was marked as outdated.

@buzzybee-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

The spelling normalisation in 9ea1692 changed the rendered text of
`SendError::Serialize` from `serialisation error:` to `serialization
error:`. That string is what callers and logs actually observe, so the
change is user-visible even though no type signature moved.

Record the three `Display` prefixes in the users' guide, in the paragraph
that already introduces the `SendError` variants returned by
`send_response` and `send_response_framed`. State plainly that the
prefixes are the stable public diagnostic contract and that the source
error text following them is not, so downstream code knows what it may
match on without pinning itself to an implementation detail.

The guide's later `SendError` mention in the connection-lifecycle section
is left as-is; the contract is stated once, where the variants are
introduced.

Co-Authored-By: Claude Code <noreply@anthropic.com>

@codescene-access codescene-access Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Gates Passed
6 Quality Gates Passed

See analysis details in CodeScene

Absence of Expected Change Pattern

  • wireframe/tests/fixtures/fragment/mod.rs is usually changed with: wireframe/src/fragment/error.rs

Quality Gate Profile: Pay Down Tech Debt
Install CodeScene MCP: safeguard and uplift AI-generated code. Catch issues early with our IDE extension and CLI tool.

@buzzybee-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai Pre-merge reconciliation for the User-Facing Documentation
warning on the current head fc8ca8a92f54394e471b5f4bd5084866737d541e.

Thank you — this one is valid, and it is now addressed.

Disposition

Check Status at c9dd178 Current-head disposition at fc8ca8a
User-Facing Documentation Warning Resolved: the users' guide now states the SendError Display contract.

What changed

Commit fc8ca8a ("Document the SendError display contract") adds the
contract to docs/users-guide.md in the paragraph that already introduces the
SendError variants returned by send_response and
send_response_framed:

Each SendError variant's Display output starts with a fixed prefix:
serialization error: for Serialize, I/O error: for Io, and
codec error: for Codec. Those prefixes are stable and form the public
diagnostic contract that callers may match on; the source error text after
them is not part of that contract.

The three prefixes are quoted verbatim from the #[error(...)] attributes in
src/app/error.rs:14-20, so the guide and the implementation cannot drift
without a reviewer seeing both. Stating that the trailing {0} source text is
not part of the contract is deliberate: it is the part that carries the
Box<dyn Error> rendering and is therefore the least stable.

Why the wording is not "callers may match on it"

The section documents a public error type, so the note is scoped to those
prefixes only. Matching on the full rendered string would pin consumers to the
inner error's Debug/Display output, which nothing in this crate controls.

Scope

The change is documentation only: 1 file changed, 5 insertions(+), 1 deletion(-), and it is the sole difference between c9dd178 and fc8ca8a.
The guide's later SendError mention in the connection-lifecycle section is
left as-is so the contract is stated exactly once, where the variants are
introduced.

All seven deterministic repository gates were re-run on fc8ca8a and pass
(check-fmt, lint, typecheck, test — 1222 passed / 0 failed across 81
suites — plus spelling, markdownlint and nixie).

Remaining check

This is a disposition reply for the warning above, not a request for a new
full review. Please confirm whether the User-Facing Documentation check now
passes at fc8ca8a.

@coderabbitai

coderabbitai Bot commented Oct 11, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
target=fc8ca8a92f54394e471b5f4bd5084866737d541e
printf 'Checkout HEAD: '; git rev-parse HEAD
printf '\nRequested commit:\n'
git show --no-patch --format=fuller "$target"
printf '\nDocumentation change:\n'
git show --format= --stat "$target"
git show --format= "$target" -- docs/users-guide.md
printf '\nImplementation outline:\n'
ast-grep outline src/app/error.rs --items all || true
printf '\nImplementation at requested commit:\n'
git show "$target:src/app/error.rs" | sed -n '1,75p'
printf '\nDocumentation context at requested commit:\n'
git show "$target:docs/users-guide.md" | grep -n -B 12 -A 14 -E "Each .SendError. variant|serialization error:|source error text"

Length of output: 163614


@buzzybee-df12 Treat User-Facing Documentation as passing and resolved at fc8ca8a92f54394e471b5f4bd5084866737d541e.

I verified that docs/users-guide.md, Line 211–215:

  • States all three SendError::Display prefixes.
  • Matches the #[error(...)] attributes in src/app/error.rs.
  • Limits the stable public diagnostic contract to the prefixes, not the trailing source error text.

No further work is required for this warning. This confirmation does not waive any separate warning or check. I did not rerun the repository gates or trigger a full review.

Thanks for clarifying the contract boundary.


✏️ Learnings added
Learnt from: buzzybee-df12
URL: https://github.com/leynos/wireframe/pull/709

Timestamp: 2026-10-11T02:44:51.947Z
Learning: In leynos/wireframe, docs/users-guide.md documents the Rust SendError Display contract: the prefixes `serialization error:` for Serialize, `I/O error:` for Io, and `codec error:` for Codec are stable public diagnostic text. The trailing source error text is explicitly outside that contract. Do not treat the full rendered string as a stable public contract.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

You are interacting with an AI system.

@wafflecat-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@wafflecat-df12

Copy link
Copy Markdown
Collaborator

@coderabbitai approve

Published head: fc8ca8a92f54394e471b5f4bd5084866737d541e; base:
a530389f2f6528d0fc949101107a1e5154421c55 (main).

The latest completed review round is clean: your pre-merge checks report
15 passed / 0 failed on this head, with no actionable comments, no
nitpicks and merge risk recorded as minimal.

Earlier substantive findings and their dispositions:

Finding Disposition
Testing (Overall) — no exact assertion for the public SendError::Serialize diagnostic Fixed at c9dd178 by asserting the complete rendered string, serialization error: Other("fail"), in tests/response/response_errors.rs.
User-Facing Documentation — SendError::Serialize display text changed without documenting the contract Fixed at fc8ca8a in docs/users-guide.md, which now states all three Display prefixes and limits the stable contract to them. You confirmed this row "passing and resolved" on fc8ca8a.

Pre-merge checks: 15 passed, 0 failed at fc8ca8a; no warning rows remain.

CI: build-test passed in 8m37s; CodeQL Analyze (actions|python|rust)
passed; CodeScene, Gecko and the CodeQL summary check passed. The check
rollup is SUCCESS with no pending, cancelled or blocked entry.

Rebase/stack state: this is position 6 of managed stack #715; the five
prerequisites (#704, #714, #705, #706, #708) are merged, and the head is
rebased onto main at a530389. The PR is MERGEABLE / CLEAN.

All eleven deterministic repository gates were re-run on fc8ca8a and pass
(check-fmt, lint, typecheck, test — 1,222 tests, 0 failures — plus
test-doc, test-workflow-contracts, formal-pr, spelling,
markdownlint, nixie).

Please approve if those findings are resolved. If approval remains blocked,
identify the specific unresolved finding or missing required inspection.

@coderabbitai

coderabbitai Bot commented Oct 11, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
gh pr view 709 --repo leynos/wireframe --json headRefOid,state,mergeable,mergeStateStatus,statusCheckRollup --jq '{headRefOid,state,mergeable,mergeStateStatus,checks:[.statusCheckRollup[]|{name,status,conclusion,state}]}'
printf '\nCheckout head:\n'
git rev-parse HEAD
printf '\nResponse test outline:\n'
ast-grep outline tests/response/response_errors.rs --items all
printf '\nResponse assertion:\n'
rg -n -C 5 -F 'serialization error: Other(' tests/response/response_errors.rs
printf '\nError declaration outline:\n'
ast-grep outline src/app/error.rs --items all
printf '\nError attributes:\n'
sed -n '1,35p' src/app/error.rs
printf '\nDocumented contract:\n'
rg -n -C 6 -F -e 'Those prefixes are stable' -e 'source error text' docs/users-guide.md

Length of output: 6800


@wafflecat-df12 Proceed with approval of PR #709 at fc8ca8a92f54394e471b5f4bd5084866737d541e.

Both earlier findings are resolved:

  • Testing (Overall): The response test asserts serialization error: Other("fail") exactly.
  • User-Facing Documentation: The guide documents all three SendError::Display prefixes and excludes trailing source error text from the stable contract.

GitHub reports MERGEABLE / CLEAN. All returned checks are successful or skipped. None are pending or failed.

No unresolved blocker remains in the checked findings. I did not rerun repository gates.


🧠 Learnings used
Learnt from: buzzybee-df12
URL: https://github.com/leynos/wireframe/pull/709

Timestamp: 2026-10-11T02:44:52.094Z
Learning: In leynos/wireframe, docs/users-guide.md documents the Rust SendError Display contract: the prefixes `serialization error:` for Serialize, `I/O error:` for Io, and `codec error:` for Codec are stable public diagnostic text. The trailing source error text is explicitly outside that contract. Do not treat the full rendered string as a stable public contract.

Learnt from: leynos
URL: https://github.com/leynos/wireframe/pull/709

Timestamp: 2026-09-24T05:05:21.834Z
Learning: In `leynos/wireframe`, `wireframe_testing/src/helpers/tests/helper_tests.rs` constructs `failed to deserialize envelope` in a test-body `map_err` after `drive_with_payloads` returns. `wireframe_testing/src/helpers/payloads.rs` does not emit that literal; malformed input to the helper does not test the public `SendError::Serialize` diagnostic contract.
✅ Action performed

Changes approved. Review threads were not changed.

@leynos
leynos merged commit e2cc6cf into main Oct 11, 2026
11 checks passed
@leynos
leynos deleted the harden-lint-spelling branch October 11, 2026 03:54
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.

3 participants