Skip to content

Adopt shared Oxford spelling enforcement - #190

Merged
leynos merged 7 commits into
mainfrom
typos-roll-out
Jul 14, 2026
Merged

Adopt shared Oxford spelling enforcement#190
leynos merged 7 commits into
mainfrom
typos-roll-out

Conversation

@leynos

@leynos leynos commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Summary

This branch replaces Weaver's repository-local spelling generator with the
shared en-GB-oxendict dictionary, cache and exact-phrase enforcement used
across the code estate. It updates maintained prose, enforces handwritten,
preserves narrow upstream identifiers and brings Mermaid CI to
nixie-cli==1.1.0 with merman-cli 0.7.0.

The refresh path is fail-closed: an unavailable HTTPS authority may use a
validated stale untracked cache, but cannot treat tracked typos.toml as a
policy-cache fallback. Shared authorities require an actual integer schema and
every policy table and key; only the explicitly identified local overlay may
use sparse input. Local regexes and file globs that could disable enforcement
broadly are rejected before policy merge.

Production HTTP 304 handling remains at urllib's HTTPError boundary, and the
unreachable response-object branch is removed. The release workflow defaults
to read-only contents access while retaining write access only for the
publishing job.

No linked issue, roadmap task or repository ExecPlan was found for this
estate-wide maintenance change.

Review walkthrough

Validation

  • make check-fmt: passed.
  • make lint: Rustdoc, Clippy and Whitaker passed.
  • make test: 1,465 nextest cases passed; four skipped. Doctests: 93 passed,
    eight ignored.
  • Focused semantic, policy, generator and HTTP tests: 40 passed.
  • Spelling helpers: 45 passed with 95.44% total coverage.
  • make spelling: generated configuration current; phrase policy and Typos
    1.48.0 clean.
  • make markdownlint: 91 files, zero errors.
  • make nixie: all diagrams valid.
  • checkmake Makefile, mbake validate Makefile, Actionlint and six
    workflow-contract tests: passed.
  • Static authority audit: the live
    leynos/agent-helper-scripts/refs/heads/main authority produced cache SHA-256
    c6d18b10a1671405bd6c6de758ec214dd54c412e38cb2a64067718c38815ad84;
    the generator contains zero tracked-configuration fallback paths.
  • The round-two review scope is exactly 12 paths. Authority completeness,
    sparse-overlay isolation, non-weakening exceptions, generated-overlay drift,
    function-arity, file-length and whitespace audits passed.
  • Rebase audit: the df5a170 base dependency surface is preserved.

Notes

Hosted checks for bcf7e096c845b244c8e84187307a0158eaa8ffd9 and the ten
evidence-mapped review-thread replies and resolutions are pending. The
untracked shared-dictionary cache remains local by design. The reconciliation
safety stash is retained until this pull request merges.

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

Sorry @leynos, your pull request is larger than the review limit of 150000 diff characters

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 6 minutes

Your organization has reached its usage spending cap. Adjust your spending cap in the billing tab.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f84d8940-bfe8-45cc-8e32-2fcf7799038d

📥 Commits

Reviewing files that changed from the base of the PR and between e455019 and 291ca72.

📒 Files selected for processing (39)
  • .github/workflows/build-and-package.yml
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .gitignore
  • AGENTS.md
  • Makefile
  • crates/weaver-cli/src/tests/unit/help_output.rs
  • docs/developers-guide.md
  • docs/documentation-style-guide.md
  • docs/execplans/13-3-3-archive-3-2-2-daemon-start-help-guidance.md
  • docs/execplans/2-2-1-act-apply-patch-sub-command.md
  • docs/execplans/3-1-1-weaver-plugins-crate.md
  • docs/execplans/3-1-1a-plugin-for-rope.md
  • docs/execplans/4-1-1-scaffold-sempai-core-and-sempai.md
  • docs/execplans/4-1-2-structured-diagnostics-with-stable-error-codes.md
  • docs/execplans/4-1-5-normalization-into-canonical-formula-model.md
  • docs/execplans/5-2-1-define-the-rename-symbol-capability-contract.md
  • docs/execplans/5-2-5-unit-behavioural-and-end-to-end-coverage-for-rename-symbol.md
  • docs/execplans/7-1-1-stable-jsonl-schemas-for-observe-get-card.md
  • docs/execplans/7-1-4-cache-integration-for-card-extraction-keyed-by-uri.md
  • docs/execplans/phase-1-implement-the-socket-listener-in-weaverd.md
  • docs/execplans/phase-4-weaver-graph.md
  • docs/reliable-testing-in-rust-via-dependency-injection.md
  • scripts/generate_typos_config.py
  • scripts/tests/conftest.py
  • scripts/tests/test_typos_rollout.py
  • scripts/tests/test_typos_rollout_check.py
  • scripts/tests/test_typos_rollout_contract.py
  • scripts/tests/test_typos_rollout_policy.py
  • scripts/tests/test_typos_rollout_refresh.py
  • scripts/tests/test_typos_rollout_semantics.py
  • scripts/tests/typos_rollout_test_support.py
  • scripts/typos_rollout.py
  • scripts/typos_rollout_cache.py
  • scripts/typos_rollout_check.py
  • scripts/typos_rollout_http.py
  • scripts/typos_rollout_policy.py
  • typos.local.toml
  • typos.toml

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

Walkthrough

The change introduces a shared spelling-policy rollout with deterministic dictionary generation, cache refresh, phrase checking, Makefile integration, expanded tests, updated documentation, and consistent en-GB artefact terminology across release workflows.

Changes

Spelling rollout

Layer / File(s) Summary
Workflow and spelling gates
.github/workflows/*, .gitignore, Makefile, AGENTS.md, typos.local.toml
Add staged spelling targets, update CI tooling, ignore generated caches, define local spelling policy, and align packaging terminology.
Dictionary generation and rendering
scripts/typos_rollout.py, scripts/generate_typos_config.py, typos.toml
Validate and merge dictionary policies, generate deterministic Typos configuration, refresh generated output, and write configurations atomically.
Cache refresh and transport handling
scripts/typos_rollout_cache.py, scripts/typos_rollout_http.py, scripts/tests/test_typos_rollout*.py
Implement atomic cache writes, metadata-aware local/HTTPS refreshes, conditional requests, offline handling, stale-cache fallback, and HTTPS redirect enforcement.
Phrase-policy checking
scripts/typos_rollout_check.py, scripts/tests/test_typos_rollout_check.py
Scan tracked files for configured phrases, honour exclusions and ignored spans, and emit ordered positional diagnostics.
Documentation and validation
docs/*, scripts/tests/test_typos_rollout_contract.py, crates/weaver-cli/src/tests/unit/help_output.rs
Document the spelling policy, update wording and headings, verify integration contracts, and retain equivalent missing-argument test behaviour.

Possibly related PRs

Suggested reviewers: lodyai[bot]

Poem

Oxford words march in a tidy parade,
Through cached dictionaries, freshly arrayed.
HTTPS guards the spelling gate,
Phrase checks keep each sentence straight.
Artefacts bloom where workflows meet—
A make-powered rhythm, neat and complete.


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (1 error, 3 warnings)

Check name Status Explanation Resolution
Testing (Overall) ❌ Error FAIL: test_dictionary_validation... omits bool/incomplete-schema cases, and no test constrains broad local ignore/exclude, so plausible policy regressions would pass. Add rejection cases for schema=True, floats and missing tables, plus a test that broad local ignore/exclude patterns are refused or cannot weaken the shared policy.
Testing (Property / Proof) ⚠️ Warning The PR introduces merge, ordering, freshness, and transition invariants, but only ships example tests; no property/proof harness is added. Add property-based coverage or a bounded proof for the merge, render, refresh, and phrase-check invariants, instead of relying only on fixed examples.
Observability ⚠️ Warning No structured observability was added: the new refresh paths have no logging, metrics or spans, and the only prints are final CLI/status messages. Add structured logs/counters at cache-refresh decisions, HTTPS failures, offline fallback, and phrase-check outcomes so maintainers can diagnose failures without source dives.
Performance And Resource Use ⚠️ Warning markdownlint now depends on spelling-helper-test, so every docs lint runs Ruff plus the full scripts pytest suite, which is avoidable repeated process work. Split the fast Markdown-only path from helper-test validation, or gate helper tests on script changes/cache so markdownlint stays cheap.
✅ Passed checks (16 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 97.85% which is sufficient. The required threshold is 80.00%.
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.
User-Facing Documentation ✅ Passed No end-user feature or behaviour changed; the diff only touches workflows, spelling tooling, tests and developer docs, and docs/users-guide.md is untouched.
Developer Documentation ✅ Passed docs/developers-guide.md documents the new spelling gate, cache/HTTP boundary, and phrase checker; no active roadmap or execplan item needed updating.
Module-Level Documentation ✅ Passed Every touched code module has a top-level docstring or Rust //! doc comment describing its purpose and relationships.
Testing (Unit And Behavioural) ✅ Passed Tests cover unit invariants, CLI, persistence, network and workflow-contract boundaries; the suites exercise public entry points, not just private seams.
Testing (Compile-Time / Ui) ✅ Passed No Rust/TS compile-time feature was added; the CLI help path already uses insta snapshots, and the new text checks stay focused with semantic assertions.
Unit Architecture ✅ Passed Query paths stay read-only, commands expose writes explicitly, and refresh/network deps are injected via RefreshOptions and test openers.
Domain Architecture ✅ Passed PASS: The diff stays in scripts, docs, and workflows; policy/render code is isolated from HTTP, cache, and filesystem concerns in separate rollout modules.
Security And Privacy ✅ Passed Workflows stay least-privilege, refresh code enforces HTTPS, tests use reserved example.test/fake data, and no secrets or auth gaps are introduced.
Concurrency And State ✅ Passed State is owned behind refresh_base/atomic_write, no async or locks were added, and tests cover refresh ordering plus failure paths.
Architectural Complexity And Maintainability ✅ Passed The new spelling modules form a one-way dependency graph, and the docs/PR description explicitly define the reuse boundary and cache/phrase-check seam.
Rust Compiler Lint Integrity ✅ Passed PASS: The Rust edit only replaces unwrap_or_else with let-else; no #[allow(...)] or touch helpers were added, and the lone clone is Arc::clone for shared ownership.
Title check ✅ Passed Keep the title aligned with the PR: it clearly describes the shared Oxford spelling enforcement change.
Description check ✅ Passed Keep the description on topic: it accurately covers the spelling-enforcement, workflow, and tooling changes.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch typos-roll-out

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

codescene-access[bot]

This comment was marked as outdated.

codescene-access[bot]

This comment was marked as outdated.

@leynos
leynos marked this pull request as ready for review July 14, 2026 01:28

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

Sorry @leynos, your pull request is larger than the review limit of 150000 diff characters

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 32ce772a05

ℹ️ 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".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/generate_typos_config.py Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes Jul 14, 2026

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

Actionable comments posted: 10

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/release.yml (1)

89-106: 🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Add explicit workflow permissions Declare a workflow-level permissions: block with contents: read so this job does not inherit the default token scope.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml around lines 89 - 106, Declare a
workflow-level permissions block in release.yml with contents set to read,
applying explicitly to the build-macos workflow and preventing inheritance of
broader default token permissions.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/documentation-style-guide.md`:
- Around line 632-633: Update the “Checkboxes” guideline in the documentation
style guide to use the repository’s en-GB-oxendict spelling, changing “GitHub
Flavored Markdown” to “GitHub-flavoured Markdown” while preserving the
surrounding wording and formatting.

In `@docs/execplans/phase-1-implement-the-socket-listener-in-weaverd.md`:
- Line 257: Update the “Artefacts and Notes” heading under “Artefacts and Notes”
to sentence case: capitalize only the first word, changing “Notes” to “notes”.

In `@scripts/generate_typos_config.py`:
- Around line 20-23: Update DEFAULT_BASE_URL to reference an immutable upstream
release tag or commit SHA instead of refs/heads/main. Preserve the existing
typos-oxendict-base.toml resource path so regeneration remains reproducible and
requires an explicit URL change for future dictionary updates.

In `@scripts/tests/test_typos_rollout_contract.py`:
- Line 1: Expand the module docstring in test_typos_rollout_contract.py to
describe the test’s purpose and utility—verifying Python syntax and Makefile
generated-configuration drift checks—and state that it should be run with pytest
from the repository root.
- Around line 19-25: Update the test around the Makefile assertions in
test_typos_rollout_contract.py to extract the spelling-config target recipe
before validating it. Assert that the indexed generated-config check and drift
check both occur within that recipe and appear in the required order, rather
than searching the entire Makefile.

In `@scripts/tests/test_typos_rollout.py`:
- Around line 18-23: Replace the RolloutModules tuple alias with a PEP 695 type
statement using the existing four-module tuple structure. Keep the alias name
and member types unchanged while adopting the Python 3.13 `type` syntax.
- Around line 26-42: Remove the module-local rollout_modules_fixture and reuse
the shared rollout_modules fixture from scripts/tests/conftest.py. Update tests
that need generate_typos_config to compose with the shared fixture or import
that module within the specific test, without redefining the fixture or
duplicating its path and cache setup.

In `@scripts/tests/typos_rollout_test_support.py`:
- Around line 1-11: Expand the docstring for the public dictionary_text helper
into numpydoc format, retaining its summary and adding Parameters and Returns
sections that document stem and the returned dictionary document string. Do not
change the function’s behavior or generated text.

In `@scripts/typos_rollout_check.py`:
- Line 15: Update the Sequence import in scripts/typos_rollout_check.py to use
collections.abc instead of typing, matching the established ABC type-hint import
pattern and satisfying Ruff UP035.
- Around line 226-237: In the main CLI flow, wrap
generator.dictionary_from_cache(repository) with handling for its OSError and
emit a concise actionable message directing the user to run the dictionary
generator first, then exit with the command’s existing failure status instead of
exposing a traceback. Preserve the current findings output and return behavior
when the cache loads successfully.

---

Outside diff comments:
In @.github/workflows/release.yml:
- Around line 89-106: Declare a workflow-level permissions block in release.yml
with contents set to read, applying explicitly to the build-macos workflow and
preventing inheritance of broader default token permissions.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 9a81a4e8-c0e1-45ff-95aa-15a8e5982f88

📥 Commits

Reviewing files that changed from the base of the PR and between f2d3499 and 32ce772.

📒 Files selected for processing (37)
  • .github/workflows/build-and-package.yml
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .gitignore
  • AGENTS.md
  • Makefile
  • crates/weaver-cli/src/tests/unit/help_output.rs
  • docs/developers-guide.md
  • docs/documentation-style-guide.md
  • docs/execplans/13-3-3-archive-3-2-2-daemon-start-help-guidance.md
  • docs/execplans/2-2-1-act-apply-patch-sub-command.md
  • docs/execplans/3-1-1-weaver-plugins-crate.md
  • docs/execplans/3-1-1a-plugin-for-rope.md
  • docs/execplans/4-1-1-scaffold-sempai-core-and-sempai.md
  • docs/execplans/4-1-2-structured-diagnostics-with-stable-error-codes.md
  • docs/execplans/4-1-5-normalization-into-canonical-formula-model.md
  • docs/execplans/5-2-1-define-the-rename-symbol-capability-contract.md
  • docs/execplans/5-2-5-unit-behavioural-and-end-to-end-coverage-for-rename-symbol.md
  • docs/execplans/7-1-1-stable-jsonl-schemas-for-observe-get-card.md
  • docs/execplans/7-1-4-cache-integration-for-card-extraction-keyed-by-uri.md
  • docs/execplans/phase-1-implement-the-socket-listener-in-weaverd.md
  • docs/execplans/phase-4-weaver-graph.md
  • docs/reliable-testing-in-rust-via-dependency-injection.md
  • scripts/generate_typos_config.py
  • scripts/tests/conftest.py
  • scripts/tests/test_typos_rollout.py
  • scripts/tests/test_typos_rollout_check.py
  • scripts/tests/test_typos_rollout_contract.py
  • scripts/tests/test_typos_rollout_policy.py
  • scripts/tests/test_typos_rollout_refresh.py
  • scripts/tests/typos_rollout_test_support.py
  • scripts/typos_rollout.py
  • scripts/typos_rollout_cache.py
  • scripts/typos_rollout_check.py
  • scripts/typos_rollout_http.py
  • typos.local.toml
  • typos.toml

Comment thread docs/documentation-style-guide.md
Comment thread docs/execplans/phase-1-implement-the-socket-listener-in-weaverd.md Outdated
Comment thread scripts/generate_typos_config.py
Comment thread scripts/tests/test_typos_rollout_contract.py Outdated
Comment thread scripts/tests/test_typos_rollout_contract.py
Comment thread scripts/tests/test_typos_rollout.py Outdated
Comment thread scripts/tests/test_typos_rollout.py Outdated
Comment thread scripts/tests/typos_rollout_test_support.py
Comment thread scripts/typos_rollout_check.py Outdated
Comment thread scripts/typos_rollout_check.py
codescene-access[bot]

This comment was marked as outdated.

@leynos

leynos commented Jul 14, 2026

Copy link
Copy Markdown
Owner Author

Addressed the outside-diff least-privilege request from the latest review. The release workflow now defaults GITHUB_TOKEN to contents: read; only the publishing release job retains its explicit contents: write override. Actionlint and the workflow-contract suite are green at e4550199832d2d97061a85c9044ccd77cca551fe.

@leynos

leynos commented Jul 14, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
✅ 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.

leynos added 5 commits July 14, 2026 04:50
Use an explicit `let-else` branch for the missing argument diagnostic so the
test preserves its failure message while satisfying Whitaker's panic-closure
rule.
Replace Weaver's repository-local spelling generator with the shared
dictionary refresh, cache and phrase-enforcement infrastructure. Preserve
narrow upstream identifiers while correcting maintained prose, including the
required `handwritten` form.

Pin Nixie 1.1.0 in CI and install Merman 0.7.0 before Mermaid validation.
Extract policy validation, correction merging and phrase scanning into
focused helpers shared with the hosted-green estate implementation.

Add exact characterization coverage while keeping the helper gate aware of
the new policy test module.
Fail before phrase checking when the shared dictionary authority is
unavailable and no valid local cache exists. Keep validated stale-cache
operation, improve checker diagnostics, and cover the cache-only contract.

Address the remaining documentation, type, fixture, Makefile scope, and
release-workflow review findings without weakening official names or the
moving shared-authority policy.
Exercise the cache-backed generator success path and assert that rendered
ignore and exclusion policy survives deterministic TOML generation.
coderabbitai[bot]
coderabbitai Bot previously requested changes Jul 14, 2026

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

Actionable comments posted: 10

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Makefile`:
- Around line 72-89: The Markdown lint dependency chain currently runs
spelling-helper-test and its full test suite before every markdownlint
invocation. Update the Makefile targets around markdownlint, spelling-config,
spelling-phrase-check, and spelling-helper-test so routine Markdown linting uses
a fast Markdown-only path, while spelling policy generation still has an
explicit helper-test validation gate or an equivalent change-based cache/skip
mechanism.

In `@scripts/tests/conftest.py`:
- Around line 14-23: Expand the docstring of rollout_modules_fixture to use the
numpy style for this public fixture, retaining its summary and adding a Returns
section that documents the returned tuple of cache, HTTP refresh, and rollout
modules.

In `@scripts/tests/test_typos_rollout_policy.py`:
- Line 57: Define one module-level type alias for the three-module tuple,
following the accepted alias pattern in test_typos_rollout.py, and replace the
repeated tuple annotations at the affected rollout_modules declarations with
that alias. Keep the alias outside any TYPE_CHECKING block so runtime annotation
references remain valid.
- Line 17: Immediately above PROHIBITED_PHRASE, add a concise one-line comment
explaining that the split string prevents the phrase checker under test from
flagging its own prohibited phrase; leave the concatenation unchanged.

In `@scripts/typos_rollout_check.py`:
- Around line 50-124: Replace the full NumPy-style docstrings in the private
functions _tracked, _excluded, and _masked with concise single-line summary
docstrings, matching the existing pattern used by _phrase_findings and
_file_findings. Leave each function’s implementation unchanged.

In `@scripts/typos_rollout_http.py`:
- Around line 257-266: Remove the unreachable HTTP_NOT_MODIFIED branch from
_remote_response_result and preserve its valid-cache behavior through the
existing general _valid_cache/_remote_is_not_newer handling. Keep 304 processing
in _http_error_result, where production urllib responses are handled.

In `@scripts/typos_rollout.py`:
- Around line 43-66: Document the public Dictionary.phrase_corrections field in
the class docstring’s NumPy-style Attributes section, describing its
phrase-replacement pairs and matching the existing documentation style. Do not
alter the dataclass fields or related behavior.
- Around line 181-220: The merge_dictionaries function currently unions local
ignore_patterns and excluded_files without enforcing the non-weakening overlay
contract. Validate local.ignore_patterns and local.excluded_files against a
narrow-scope policy before merging, rejecting broad expressions such as “.*” or
“**/*”; alternatively, remove local authority and use only the shared dictionary
values, while preserving the existing sorted-union behavior for permitted
entries.
- Around line 104-133: Update _dictionary_from_text to reject Boolean and
floating-point schema values, accepting only an actual integer matching
SCHEMA_VERSION rather than relying on equality alone. Require all base-policy
tables (oxford, words, phrases, patterns, and files) and their expected keys to
be present and valid before constructing Dictionary; preserve sparse defaults
only for explicitly identified local overlays, and add rejection tests for
Boolean, floating-point, and incomplete dictionaries.

In `@typos.local.toml`:
- Around line 15-35: Remove the redundant anchored artifact-name and
artifact-suffix patterns from the ignore list in typos.local.toml, specifically
the entries matching those keys and their interpolated forms. Retain the
should-upload-workflow-artifacts patterns and the existing word-boundary entries
for artifact-name and artifact-suffix.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f131c331-168a-4e4f-b983-bccdca45a2ee

📥 Commits

Reviewing files that changed from the base of the PR and between f2d3499 and e455019.

📒 Files selected for processing (37)
  • .github/workflows/build-and-package.yml
  • .github/workflows/ci.yml
  • .github/workflows/release.yml
  • .gitignore
  • AGENTS.md
  • Makefile
  • crates/weaver-cli/src/tests/unit/help_output.rs
  • docs/developers-guide.md
  • docs/documentation-style-guide.md
  • docs/execplans/13-3-3-archive-3-2-2-daemon-start-help-guidance.md
  • docs/execplans/2-2-1-act-apply-patch-sub-command.md
  • docs/execplans/3-1-1-weaver-plugins-crate.md
  • docs/execplans/3-1-1a-plugin-for-rope.md
  • docs/execplans/4-1-1-scaffold-sempai-core-and-sempai.md
  • docs/execplans/4-1-2-structured-diagnostics-with-stable-error-codes.md
  • docs/execplans/4-1-5-normalization-into-canonical-formula-model.md
  • docs/execplans/5-2-1-define-the-rename-symbol-capability-contract.md
  • docs/execplans/5-2-5-unit-behavioural-and-end-to-end-coverage-for-rename-symbol.md
  • docs/execplans/7-1-1-stable-jsonl-schemas-for-observe-get-card.md
  • docs/execplans/7-1-4-cache-integration-for-card-extraction-keyed-by-uri.md
  • docs/execplans/phase-1-implement-the-socket-listener-in-weaverd.md
  • docs/execplans/phase-4-weaver-graph.md
  • docs/reliable-testing-in-rust-via-dependency-injection.md
  • scripts/generate_typos_config.py
  • scripts/tests/conftest.py
  • scripts/tests/test_typos_rollout.py
  • scripts/tests/test_typos_rollout_check.py
  • scripts/tests/test_typos_rollout_contract.py
  • scripts/tests/test_typos_rollout_policy.py
  • scripts/tests/test_typos_rollout_refresh.py
  • scripts/tests/typos_rollout_test_support.py
  • scripts/typos_rollout.py
  • scripts/typos_rollout_cache.py
  • scripts/typos_rollout_check.py
  • scripts/typos_rollout_http.py
  • typos.local.toml
  • typos.toml

Comment thread Makefile
Comment thread scripts/tests/conftest.py
Comment thread scripts/tests/test_typos_rollout_policy.py
Comment thread scripts/tests/test_typos_rollout_policy.py Outdated
Comment thread scripts/typos_rollout_check.py
Comment thread scripts/typos_rollout_http.py Outdated
Comment thread scripts/typos_rollout.py
Comment thread scripts/typos_rollout.py Outdated
Comment thread scripts/typos_rollout.py
Comment thread typos.local.toml
Reject incomplete authority dictionaries and broad local exceptions while
retaining an explicit sparse-overlay path for repository-specific policy.
Keep production HTTP 304 handling on the real urllib error path.

Complete the remaining review documentation, type, fixture, and generated
configuration clean-ups without weakening the spelling gate order.
codescene-access[bot]

This comment was marked as outdated.

Extract small predicates from the shared-authority and local-exception
validators. This preserves the strict policy contracts while keeping the
new validation code below the hosted code-health thresholds.

leynos commented Jul 14, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
✅ 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.

@leynos
leynos dismissed stale reviews from coderabbitai[bot] and coderabbitai[bot] July 14, 2026 03:33

Dismissed as stale after all findings were addressed and all 21 review threads resolved. Current head 291ca72 passes the complete local gate, hosted build-test and release matrix, CodeScene, and CodeRabbit checks.

@leynos
leynos merged commit 801cb64 into main Jul 14, 2026
13 checks passed
@leynos
leynos deleted the typos-roll-out branch July 14, 2026 03:33
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.

1 participant