Skip to content

Add shared argument and paragraph fingerprint data models (8.1.3)#224

Merged
leynos merged 6 commits into
mainfrom
add-fingerprint-data-models-jck2wp
May 18, 2026
Merged

Add shared argument and paragraph fingerprint data models (8.1.3)#224
leynos merged 6 commits into
mainfrom
add-fingerprint-data-models-jck2wp

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented Apr 23, 2026

Summary

  • Introduces an ExecPlan document for roadmap item 8.1.3: plan to add shared argument and paragraph fingerprint data models. This is a planning artifact guiding future implementation in the Whitaker project. No code changes are included in this PR.

Changes

  • Added docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md (new)

Rationale and Scope

  • Provides a structured plan to fill the remaining shared-data gap between rstest detection and later lints, enabling a single, reusable representation of repeatable setup evidence for both argument fingerprints and paragraph fingerprints.
  • Outlines the goals, constraints, tolerances, risks, progress tracking, and decision log for the 8.1.3 effort.
  • Specifies the public surface expectations and the intended architecture to keep the models pure and workspace-compatible for future roadmap items (8.2.x and 8.4.x).

Plan and Milestones (high level)

  • Milestone 1: Lock the contract in tests first
    • Add unit-test scaffolding and behavior test harnesses that describe public expectations without production code.
  • Milestone 2: Add argument fingerprint models
    • Implement lint-A facing models in common/src/rstest/argument_fingerprint.rs with stable, testable constructors.
  • Milestone 3: Add paragraph fingerprint models
    • Implement lint-C facing models in common/src/rstest/paragraph_fingerprint.rs with deterministic local-slot normalization.
  • Milestone 4: Re-export and document the shared API
    • Update common/src/rstest/mod.rs and lib.rs; include Rustdoc examples following doctest guidance.
  • Milestone 5: Update design and roadmap docs
    • Record implementation decisions in docs/lints-for-rstest-fixtures-and-test-hygiene.md and reflect progress in docs/roadmap.md.

Validation plan (for next steps)

  • Start with focused unit tests describing the public fingerprint contracts, then implement the models to satisfy those tests.
  • Add behavior tests for fingerprint equality/normalization and ensure determinism across runs.
  • Run repository validation gates (fmt, lint, tests) as milestones progress.

Documentation impact

  • This PR adds the planning document; future work will update docs/lints-for-rstest-fixtures-and-test-hygiene.md and docs/roadmap.md as decisions are solidified and gates are satisfied.

Risks and considerations

  • The plan emphasizes keeping the fingerprint models pure and public API oriented, avoiding HIR walking or wiring into other crates until later roadmap items.
  • The plan anticipates potential scale and file-size constraints by proposing dedicated test modules as implementation proceeds.

Reviewer notes

  • This is a planning-only change. Please review the proposed structure, milestones, and alignment with the repository’s roadmap so we can proceed to implementation in follow-up PRs.

◳ Generated by DevBoxer


ℹ️ Tag @devboxerhub to ask questions and address PR feedback

📎 Task: https://www.devboxer.com/task/03f0d9aa-ec96-4949-852c-fd06b237fd72

Summary by Sourcery

Documentation:

  • Add an ExecPlan markdown document detailing goals, constraints, milestones, risks, and validation steps for implementing shared argument and paragraph fingerprint data models used by future rstest fixture-hygiene lints.

…gerprint data models

This new document outlines the design and implementation plan for roadmap item 8.1.3. It specifies the creation of shared argument and paragraph fingerprint data models in the common::rstest module, intended to serve future lint implementations. The execplan covers purpose, constraints, risks, progress checkpoints, and detailed decisions to ensure a stable and deterministic API. It includes comprehensive guidance on test coverage, API design, and documentation updates, forming the foundation for subsequent development steps.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 23, 2026

Review Change Stack

Walkthrough

Implement shared rstest argument and paragraph fingerprint data models with deterministic normalisation, re-export types from common::rstest, add unit/proptest/BDD tests, add Markdown lint config, adjust Makefile PATH handling for tool discovery, and update ExecPlan/docs and the roadmap.

Changes

Argument and Paragraph Fingerprint Data Models

Layer / File(s) Summary
Configuration & Build Environment
.markdownlint.json, Makefile
Add Markdownlint configuration and centralise TOOL_PATH_SUFFIX; export adjusted PATH in Makefile recipes for tool discovery.
Argument Fingerprinting Types
common/src/rstest/argument_fingerprint.rs
Add ArgAtom enum (FixtureLocal, ConstLit, ConstPath, Unsupported) and ArgFingerprint struct with constructor and accessor APIs.
Paragraph Fingerprinting Types
common/src/rstest/paragraph_fingerprint.rs
Add LocalSlot newtype and ParagraphNormalizer assigning slots by first appearance; add CalleeShape, ExprShape, StmtShape, and ParagraphFingerprint with constructors/accessors.
Module Integration & Re-exports
common/src/lib.rs, common/src/rstest/mod.rs, common/src/rstest/tests/mod.rs
Declare new argument_fingerprint and paragraph_fingerprint submodules; re-export ArgAtom, ArgFingerprint, LocalSlot, ParagraphNormalizer, CalleeShape, ExprShape, StmtShape, and ParagraphFingerprint; update module docs and re-export formatting.
Unit Test Coverage
common/src/rstest/tests/fingerprint.rs
Add unit tests validating argument fingerprint equality/ordering/unsupported preservation and paragraph fingerprint normalisation/determinism.
Behaviour-Driven Testing
common/tests/features/rstest_fingerprint.feature, common/tests/rstest_fingerprint_behaviour.rs
Add feature file, BDD world, step definitions and scenario wiring covering fingerprint matching/divergence, unsupported atom handling, and deterministic slot assignment.
Property Tests & Dev-deps
common/src/rstest/tests/fingerprint_props.rs, common/Cargo.toml
Add proptest property tests and add proptest = "1" to dev-dependencies.
Documentation & Roadmap
docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md, docs/lints-for-rstest-fixtures-and-test-hygiene.md, docs/roadmap.md, docs/developers-guide.md
Add ExecPlan and implementation-decision notes; document fingerprint model placement and slot normalisation contract; mark roadmap item 8.1.3 complete; update developer guide and lint docs.

Possibly related PRs

  • leynos/whitaker#171: Modifies the same common::rstest surface by adding/re-exporting rstest helper modules and types; likely related integration context.

Poem

🎯 Fingerprints now guide the way,
Arguments and paragraphs at play,
Normalised slots by first-seen light,
Deterministic grouping shines so bright—
The 8.1.3 roadmap takes flight! ✨

🚥 Pre-merge checks | ✅ 18
✅ Passed checks (18 passed)
Check name Status Explanation
Description check ✅ Passed The description comprehensively covers the ExecPlan content, implementation strategy, milestones, and scope of the planning work.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% 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.
Testing (Overall) ✅ Passed All 20 tests (11 unit + 4 property + 5 BDD) exercise actual product behaviour. Tests would fail if implementations were removed or inverted. No mocks, tautologies, or weak assertions detected.
User-Facing Documentation ✅ Passed Internal library APIs documented in developers-guide.md, not users-guide. Correct documentation separation maintained for intended audience (library developers vs lint end-users).
Developer Documentation ✅ Passed Developer documentation complete. APIs documented in developers-guide.md with examples. Design decisions in lints document. ExecPlan present and marked complete. Roadmap 8.1.3 checked off.
Module-Level Documentation ✅ Passed All newly-added modules carry module-level docstrings documenting purpose, utility and function. Parent rstest/mod.rs explicitly documents module relationships.
Testing (Unit And Behavioural) ✅ Passed All contract requirements satisfied: 6 unit tests, 5 BDD scenarios exercising public API boundary, 4 property tests, edge-case coverage (empty collections, strings, u32::MAX).
Testing (Property / Proof) ✅ Passed Four substantive proptest tests verify invariants: first-appearance ordering, idempotence, equality, and index roundtripping. Tests use rigorous randomised input across ranges and would detect bugs.
Testing (Compile-Time / Ui) ✅ Passed Pure data models only; no compile-time behaviour or UI output. Trybuild and snapshot tests not applicable.
Unit Architecture ✅ Passed Pure fingerprint models maintain clear boundaries: immutable reads, explicit mutable commands with &mut, no I/O or global state, excellent composability.
Domain Architecture ✅ Passed Fingerprint models are pure, infrastructure-free value types. They segregate concerns properly—no HTTP, SQL, ORM, filesystem, serialisation, or framework leakage. Explicitly scoped for lint support.
Observability ✅ Passed PR introduces pure data structures for fingerprinting (no I/O, networking, error handling). Changes are development infrastructure only. No operational behaviour requiring observability is introduced.
Security And Privacy ✅ Passed PR adds pure fingerprint data models with zero security concerns: no secrets, unsafe code, injection risks, privilege escalation, authorisation bypass, or privacy violations.
Performance And Resource Use ✅ Passed Memory bounded proportional to input size; BTreeMap O(log n); no hot-path operations; String allocations at test setup only; property test bounds explicit; no regressions.
Concurrency And State ✅ Passed PR adds pure fingerprint data models with no async, locks, or shared state. All types derive Clone/Eq/Hash. Single-threaded test usage only. Concurrency check not applicable.
Title check ✅ Passed The pull request title correctly references the roadmap item 8.1.3 and describes the main change: adding shared argument and paragraph fingerprint data models.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-fingerprint-data-models-jck2wp

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

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented Apr 23, 2026

Reviewer's Guide

Adds a new ExecPlan markdown document that defines the execution plan, constraints, risks, milestones, and validation strategy for implementing shared argument and paragraph fingerprint data models in the whitaker-common rstest module; no code behavior changes are introduced.

Class diagram for planned rstest fingerprint data models

classDiagram
    class ArgAtom {
        <<enum>>
        +FixtureLocal name : String
        +ConstLit text : String
        +ConstPath def_path : String
        +Unsupported
    }

    class ArgFingerprint {
        +atoms : Vec~ArgAtom~
        +new(atoms : Vec~ArgAtom~) ArgFingerprint
        +atoms_ref() Vec~ArgAtom~
    }

    class LocalSlot {
        +value : u16
        +new(value : u16) LocalSlot
        +get() u16
    }

    class CalleeShape {
        <<enum>>
        +DefPath value : String
        +Unknown
    }

    class ExprShape {
        <<enum>>
        +Call callee : CalleeShape
        +Call argc : usize
        +MethodCall method : String
        +MethodCall argc : usize
        +Path
        +Lit
        +Other
    }

    class StmtShape {
        <<enum>>
        +Let init : ExprShape
        +MutCall receiver : Option~LocalSlot~
        +MutCall callee : CalleeShape
    }

    class ParagraphFingerprint {
        +shapes : Vec~StmtShape~
        +new(shapes : Vec~StmtShape~) ParagraphFingerprint
        +shapes_ref() Vec~StmtShape~
    }

    ArgFingerprint --> ArgAtom : contains
    ParagraphFingerprint --> StmtShape : contains
    StmtShape --> ExprShape : uses
    StmtShape --> LocalSlot : uses
    StmtShape --> CalleeShape : uses
    ExprShape --> CalleeShape : may reference
    ParagraphFingerprint --> LocalSlot : uses via StmtShape
Loading

Flow diagram for 8.1.3 implementation milestones and validation

flowchart TD
    M1["Milestone 1
Lock contracts in tests
- Unit tests for fingerprints
- BDD scenarios"] --> M2["Milestone 2
Implement argument_fingerprint models"]
    M2 --> M3["Milestone 3
Implement paragraph_fingerprint models
(with deterministic LocalSlot normalization)"]
    M3 --> M4["Milestone 4
Re-export API from common::rstest and lib.rs
Add Rustdoc examples"]
    M4 --> M5["Milestone 5
Update design docs and roadmap"]
    M5 --> V["Validation
- cargo test -p whitaker-common rstest::
- cargo test rstest_fingerprint_behaviour
- cargo clippy -p whitaker-common --all-targets --all-features
- make fmt markdownlint nixie check-fmt lint test"]
Loading

File-Level Changes

Change Details Files
Introduce a detailed ExecPlan document describing how to implement shared argument and paragraph fingerprint models and their tests in future roadmap work.
  • Add a planning-only markdown document capturing constraints, tolerances, risks, progress checklist, and decision log for roadmap item 8.1.3.
  • Describe the proposed Rust module layout, public API sketches, and test/behaviour harness structure for argument and paragraph fingerprints.
  • Define milestone breakdown, red-green testing strategy, and validation/CI commands that must pass once implementation begins.
  • Record explicit requirements around determinism, unsupported-shape handling, file-size limits, and documentation updates for related lint design docs and roadmap entries.
docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md

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-delta-analysis[bot]

This comment was marked as outdated.

leynos added 2 commits May 1, 2026 00:59
Introduce shared argument and paragraph fingerprint models in
`whitaker-common` so later rstest hygiene lints can group repeated helper
arguments and setup paragraphs without depending on compiler-private data.

Add deterministic paragraph local-slot normalization, preserve unsupported
argument atoms explicitly, and cover the public API with focused unit tests
and rstest-bdd behaviour scenarios.

Record the implementation decisions in the design notes and roadmap, and add
legacy Markdown lint configuration so `make fmt` and `make markdownlint`
share the same policy.
Prepend the standard user-local binary directories to the Makefile path so
hook-driven validation can find `cargo`, `markdownlint-cli2`, and related
local developer tools even when the hook environment does not inherit an
interactive shell path.

Record the post-turn hook finding in the 8.1.3 ExecPlan so future runs explain
why the Makefile carries the explicit path setup.
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos leynos marked this pull request as ready for review May 2, 2026 09:12
Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Sorry @leynos, you have reached your weekly rate limit of 2500000 diff characters.

Please try again later or upgrade to continue using Sourcery

@coderabbitai coderabbitai Bot added the Roadmap label May 2, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md`:
- Line 337: The API sketch declares LocalSlot with the wrong integer width;
update the type from LocalSlot(u16) to LocalSlot(u32) so the docs match the
implemented contract: locate the declaration of the LocalSlot struct in the
ExecPlan API sketch and replace the u16 payload with u32 (symbol: LocalSlot) to
remove the stale draft type and keep documentation consistent.
- Line 121: The doc line currently says "avoid `.expect()` in test code" which
conflicts with the repo's lint policy that allows `.expect()`/`.unwrap()` in
tests; update that sentence in the document to reflect policy by replacing it
with wording like "use `.expect()` messages deliberately in tests" (or similar),
e.g., change the phrase in the sentence that includes "prefer explicit
`Given`/`When`/`Then` transitions, and avoid `.expect()` in test code" to read
"prefer explicit `Given`/`When`/`Then` transitions, and use `.expect()` messages
deliberately in tests" so the guidance aligns with allow-expect-in-tests = true.

In `@Makefile`:
- Line 3: Replace the global PATH mutation (the line starting with "export PATH
:= $(HOME)/.cargo/bin:...") with a per-target tool path variable (e.g., declare
TOOL_PATH_SUFFIX := $(HOME)/.cargo/bin:$(HOME)/.bun/bin:$(HOME)/.local/bin) and
update targets that need those user-local tools (for example the "markdownlint"
target that invokes $(MDLINT)) to run with PATH="$(PATH):$(TOOL_PATH_SUFFIX)"
$(MDLINT) ... so the user-local bins are appended only for tooling targets
rather than prepending them globally.
🪄 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: 9b0ab14d-75d3-4e4b-8441-44c71ce6b4b5

📥 Commits

Reviewing files that changed from the base of the PR and between f768c2e and d023e54.

📒 Files selected for processing (13)
  • .markdownlint.json
  • Makefile
  • common/src/lib.rs
  • common/src/rstest/argument_fingerprint.rs
  • common/src/rstest/mod.rs
  • common/src/rstest/paragraph_fingerprint.rs
  • common/src/rstest/tests/fingerprint.rs
  • common/src/rstest/tests/mod.rs
  • common/tests/features/rstest_fingerprint.feature
  • common/tests/rstest_fingerprint_behaviour.rs
  • docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md
  • docs/lints-for-rstest-fixtures-and-test-hygiene.md
  • docs/roadmap.md

Comment thread docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md Outdated
Comment thread docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md Outdated
Comment thread Makefile Outdated
Drop the global PATH prepend so default recipes inherit the caller's
environment. Append `TOOL_PATH_SUFFIX` only for targets that invoke
user-local binaries (tests, publish-check, fmt helpers, markdownlint,
nixie, workflow tooling).

Align the 8.1.3 ExecPlan sketch and BDD note with the implemented
`LocalSlot(u32)` contract and test `expect()` policy.

Co-authored-by: Cursor <cursoragent@cursor.com>
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 4, 2026

@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. Where a change is out of scope for this PR, propose a GitHub issue unless one exists already.

@coderabbitai

This comment was marked as resolved.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 4, 2026

@coderabbitai re:

This is out of scope for the current PR. Shall I open a GitHub issue to track the upgrade of these three actions to Node.js 24-compatible versions before the June 2nd deadline?

Please create a new GitHub issue for this

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

Tip

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
gh issue create \
  --repo leynos/whitaker \
  --title "Upgrade pinned GitHub Actions to Node.js 24-compatible versions before 2 June 2026" \
  --body "## Background

GitHub has announced that Node.js 20-based actions are deprecated and will be forced to run with Node.js 24 by default starting **2 June 2026**.

This was surfaced as a warning in the \`windows-compat\` CI job log on PR `#224` (https://github.com/leynos/whitaker/pull/224), which was flagged by `@coderabbitai`.

This issue is out of scope for PR `#224` and is tracked here as a follow-up.

## Affected actions

The following pinned actions use Node.js 20 and must be upgraded to Node.js 24-compatible versions:

| Action | Currently pinned SHA |
|--------|----------------------|
| \`actions/cache\` | \`0057852bfaa89a56745cba8c7296529d2fc39830\` |
| \`astral-sh/setup-uv\` | \`e92bafb6253dcd438e0484186d7669ea7a8ca1cc\` |
| \`mozilla-actions/sccache-action\` | \`7d986dd989559c6ecdb630a3fd2557667be217ad\` |

## Required work

1. For each action above, identify the latest release that ships a Node.js 24-compatible runtime.
2. Update the pinned SHA (and, where appropriate, the \`@vN\` tag) in every workflow file that references these actions.
3. Verify that CI passes on all platforms after the upgrade.

## Deadline

Complete before **2 June 2026** to avoid broken CI.

---

Requested by `@leynos`." \
  --assignee leynos 2>&1

Length of output: 46


@leynos — done. GitHub issue #227 has been opened and assigned to you. It tracks the upgrade of actions/cache, astral-sh/setup-uv, and mozilla-actions/sccache-action to Node.js 24-compatible versions before the 2 June 2026 deadline.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 6, 2026

@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. Where a change is out of scope for this PR, propose a GitHub issue unless one exists already.

@coderabbitai

This comment was marked as resolved.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented May 7, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

✅ Actions performed

Review triggered.

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.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 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/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md`:
- Around line 185-188: The sentence inaccurately says the Makefile "prepends"
tool directories to PATH; update the wording to reflect that the change is a
target-scoped (recipe-level) PATH extension rather than a global prepend. Edit
the passage to mention that each Makefile recipe temporarily extends PATH for
that target's commands (e.g., recipe-level or target-scoped PATH handling) so
tools like `cargo` and `markdownlint-cli2` resolve consistently during post-turn
hooks, and remove the implication of a global PATH modification.
- Around line 14-16: Update the approval sentence in
docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md: replace
the present-tense phrase "This plan was approved for implementation on
2026-05-01. Code changes for roadmap item 8.1.3 may proceed within the
tolerances below." with a past-tense completion statement (e.g., "This plan was
approved and implemented on 2026-05-01; roadmap item 8.1.3 is now complete.") so
the document matches the completed status noted at the top of the file.

In `@Makefile`:
- Line 6: Change the Makefile so TOOL_PATH_SUFFIX is defined with a recursive
assignment and shell-expanded HOME (use TOOL_PATH_SUFFIX =
$$HOME/.cargo/bin:$$HOME/.bun/bin:$$HOME/.local/bin instead of := with $(HOME)),
and update every export PATH usage to perform shell-time expansion by replacing
occurrences like export PATH="$(PATH):$(TOOL_PATH_SUFFIX)" and any "$(PATH)"
concatenations with export PATH="$$PATH:$(TOOL_PATH_SUFFIX)"; keep the
TOOL_PATH_SUFFIX reference unchanged elsewhere; apply this change to all
instances (the review lists the affected blocks) so Make no longer freezes
PATH/HOME at parse time on Windows CI.
🪄 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: 5c8c9f2e-c009-489c-aa8c-e65b11c3c41d

📥 Commits

Reviewing files that changed from the base of the PR and between d023e54 and 248213a.

📒 Files selected for processing (2)
  • Makefile
  • docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md

Comment thread docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md Outdated
Comment thread docs/execplans/8-1-3-argument-and-paragraph-fingerprint-data-models.md Outdated
Comment thread Makefile Outdated
Resolve review feedback by using shell-expanded user-local tool paths in
Makefile recipes instead of freezing `HOME` or `PATH` at parse time.

Update the 8.1.3 ExecPlan to describe the completed state and the
recipe-level PATH handling accurately.
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos

This comment was marked as resolved.

@coderabbitai

This comment was marked as resolved.

Add developer-guide coverage for the shared argument and paragraph
fingerprint APIs introduced under `common::rstest`.

Extend unit and property coverage for empty fingerprints, boundary atom
values, `LocalSlot` roundtrips, and `ParagraphNormalizer` ordering and
idempotence.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

Tip

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check current PR status and title
gh pr checks 224 --repo leynos/whitaker 2>&1
echo "---TITLE---"
gh pr view 224 --repo leynos/whitaker --json title -q '.title' 2>&1

echo "---TRY TITLE UPDATE---"
gh pr edit 224 --repo leynos/whitaker --title "Add shared argument and paragraph fingerprint data models (8.1.3)" 2>&1

echo "---DEVELOPERS GUIDE FINGERPRINT SECTION---"
fd -i "developers-guide.md" --exec grep -c -i "fingerprint" {} 2>&1

echo "---FINGERPRINT PROPS FILE---"
fd "fingerprint_props.rs" --exec cat {} 2>&1 | head -20

echo "---PROPTEST IN CARGO.TOML---"
fd "Cargo.toml" --search-path common --exec grep -n "proptest" {} 2>&1

echo "---EDGE CASE TESTS IN FINGERPRINT.RS---"
fd "fingerprint.rs" --search-path common/src --exec grep -n "empty\|overflow\|boundary\|u32::MAX\|long_string\|empty_string" {} 2>&1

echo "---FINGERPRINT_PROPS IN MOD.RS---"
fd "mod.rs" --search-path common/src/rstest/tests --exec cat {} 2>&1

echo "---OPEN ISSUES---"
gh issue list --repo leynos/whitaker --state open 2>&1 | head -20

Length of output: 11421


@leynos — here is the current status of all four warnings.


windows-compat / linux-full

Both pass.


✅ Developer Documentation

docs/developers-guide.md contains 10 occurrences of "fingerprint" — the "Shared fingerprint helpers" section is present and populated.


✅ Testing — Unit and Behavioural

common/src/rstest/tests/fingerprint.rs now covers all required edge cases:

Test Line
empty_argument_fingerprint_equals_another_empty 98
empty_paragraph_fingerprint_equals_another_empty 106
arg_atom_constructors_accept_empty_string 114
arg_atom_constructors_accept_long_string 124
LocalSlot::new(u32::MAX).index() boundary 133

✅ Testing — Property / Proof

  • common/Cargo.toml has proptest = "1" under [dev-dependencies] (line 33).
  • common/src/rstest/tests/fingerprint_props.rs exists with four proptest! property tests.
  • common/src/rstest/tests/mod.rs declares mod fingerprint_props;.

⚠️ Title check — one manual action required

The CLI command to rename the PR title is blocked by workflow restrictions. Update the title manually to:

Add shared argument and paragraph fingerprint data models (8.1.3)

@leynos leynos changed the title Plan: add shared argument and paragraph fingerprint data models Add shared argument and paragraph fingerprint data models (8.1.3) May 18, 2026
@leynos leynos merged commit 5165b34 into main May 18, 2026
5 checks passed
@leynos leynos deleted the add-fingerprint-data-models-jck2wp branch May 18, 2026 18:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant