Repository navigation
refactor: scrub replay-hash / byte-identical terminology from live docs - #22
Conversation
Rephrase the imprecise 'byte-identical output' determinism language in the live knowledge-base docs (AGENTS.md, CONTEXT.md, ARCHITECTURE.md, README.md, SECURITY.md, TESTING_STRATEGY.md, HOW_TO_ADD_NEW_CAPABILITY.md, HOW_TO_ADD_NEW_GRAMMAR.md) and in source/test docstrings (paxman/core/extensions.py, tests/integration/test_pipeline.py, tests/property/test_money_properties.py) with the precise determinism definition: no world-knowledge, no clock, no environment-dependent ordering, no fuzzy logic, no network inference across recognition, validation, and canonicalization. Historical plan/spec/research/report artifacts that still reference the removed replay_hash mechanism are now under docs/development/ and left untouched (they already carry 'replay-hash removed; do not use as a sample' notes). The intentional removal assertion 'assert not hasattr(vs, "replay_hash")' in tests/unit/test_version_stamp.py is preserved.
|
Warning Review limit reached
Next review available in: 38 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe change revises determinism terminology, clarifies semantic grammar activation, adds development-document policy, and expands planning, architecture, research, and capability-design documentation. Runtime behavior is unchanged. ChangesDocumentation guidance
Estimated code review effort: 2 (Simple) | ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches 💡 1🛠️ Fix failing CI checks 💡
📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Note
Due to the large number of review comments, Critical severity comments were prioritized as inline comments.
🟠 Major comments (21)
SECURITY.md-24-24 (1)
24-24: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winRemove the timing-side-channel claim.
Deterministic results do not imply constant execution time or prevent timing leakage. Remove this clause unless the implementation provides a separate, verified constant-time guarantee.
🤖 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 `@SECURITY.md` at line 24, Update the “Deterministic Computation” statement in SECURITY.md to remove the claim that determinism prevents timing-based side channels. Retain the supported guarantees about reproducibility, canonical output, and excluded dependencies, without asserting constant-time behavior.docs/development/plans/2026-08-06-url-capability.md-239-243 (1)
239-243: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winMatch the engine’s
format_value()signature.The centralize-output plan calls:
capability.format_value(canonical, output_format, notation)This plan specifies a two-argument override. Implementing it as written will fail when the engine passes
notation.Proposed contract adjustment
-def format_value(value: str, output_format: str = "url") -> str: +def format_value( + value: str, + output_format: str | None, + notation: URLNotation, +) -> str:🤖 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 `@docs/development/plans/2026-08-06-url-capability.md` around lines 239 - 243, Update URLCapability.format_value to match the engine’s three-argument call contract by accepting value, output_format, and notation, while retaining URL identity formatting and output-format validation. Ensure create_contract and the rest of URLCapability remain unchanged.docs/development/specs/2026-07-28-country-capability-design.md-292-318 (1)
292-318: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winMake
CountryContractfollow the repository contract base.The proposed class is not a
CapabilityContract, usesslots=True, and omitsDEFAULT_OUTPUT_FORMATandOFFERED_OUTPUT_FORMATS. Define it as a frozen, non-slottedCapabilityContractwith the standard output-format fields andactive_grammars.🤖 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 `@docs/development/specs/2026-07-28-country-capability-design.md` around lines 292 - 318, Update CountryContract to inherit from CapabilityContract and remain frozen without slots; add the repository-standard DEFAULT_OUTPUT_FORMAT and OFFERED_OUTPUT_FORMATS fields alongside the existing output-format configuration, while preserving the active_grammars property and country-specific fields.Source: Coding guidelines
docs/development/research/2026-08-06-url-canonicalization.md-410-415 (1)
410-415: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winRemove references to development documents from development documents. The repository policy forbids these dependencies.
docs/development/research/2026-08-06-url-canonicalization.md#L410-L415: remove thedocs/development/MILESTONE.mdreference.docs/development/research/2026-08-09-si-unit-canonicalization.md#L555-L560: remove thedocs/development/MILESTONE.mdreference and correct or remove the staledocs/research/...paths.🤖 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 `@docs/development/research/2026-08-06-url-canonicalization.md` around lines 410 - 415, Remove the docs/development/MILESTONE.md reference from the Project references section of docs/development/research/2026-08-06-url-canonicalization.md (lines 410-415). In docs/development/research/2026-08-09-si-unit-canonicalization.md (lines 555-560), remove its docs/development/MILESTONE.md reference and correct or remove the stale docs/research/... paths; no other references require changes.Source: Coding guidelines
docs/development/specs/2026-07-28-country-capability-design.md-63-77 (1)
63-77: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winKeep output formatting out of rules.
The design says rules read
contract.output_formatand normalize directly to alpha-3, numeric, or name. Rules must return the default alpha-2 canonical value.CountryCapability.format_value()must apply presentation formatting after validation.🤖 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 `@docs/development/specs/2026-07-28-country-capability-design.md` around lines 63 - 77, Update the country capability design so normalization rules always return the validated alpha-2 canonical value and do not inspect contract.output_format. Move all alpha-3, numeric, and name conversion into CountryCapability.format_value(), applied only after validation, while preserving alpha-2 as the default output.Source: Coding guidelines
docs/development/research/2026-08-05-money-canonicalization.md-631-635 (1)
631-635: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse a valid
MISSINGexample.Money grammars match complete currency-plus-amount tokens. An amount-only token is not recognized, so it produces
MISSING, notINVALID. Use an unknown currency or invalid amount as the recognized-but-unvalidatedINVALIDcase.🤖 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 `@docs/development/research/2026-08-05-money-canonicalization.md` around lines 631 - 635, Update the test summary in the canonicalization documentation to use a valid recognized-but-unvalidated INVALID example, such as an unknown currency or invalid amount; remove the amount-only token example, which should be classified as MISSING.docs/development/specs/2026-07-28-country-capability-design.md-239-284 (1)
239-284: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winGate authority features with
requires_features.
SectionLocalizedNames.matches()andSectionHistoricalNames.matches()inspectcontract.include_*. The engine should gate these rules through metadata. Keepmatches()andnormalize()independent of contract feature flags.🤖 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 `@docs/development/specs/2026-07-28-country-capability-design.md` around lines 239 - 284, Update the metadata for SectionLocalizedNames and SectionHistoricalNames to declare their respective include_localized and include_historical feature requirements via requires_features. Remove contract feature-flag checks from both matches() implementations while retaining name-shape and lookup-table matching, and keep normalize() independent of contract flags.Source: Coding guidelines
docs/development/research/2026-08-05-money-canonicalization.md-735-750 (1)
735-750: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winKeep bare
$opt-in.D3 and D4 state that bare
$is unresolved whendollar_sign_currencyisNone. D4a later says the CLDR rule resolves$toUSD, which reintroduces the rejected default. Make resolution conditional on the contract value.🤖 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 `@docs/development/research/2026-08-05-money-canonicalization.md` around lines 735 - 750, Update the CLDR rule’s symbol resolution described in D4a to resolve bare `$` only when the contract’s dollar_sign_currency value is provided, using that opt-in code instead of unconditionally mapping `$` to USD. Preserve definitive symbol mappings and keep bare `$` INVALID when the value is None, and make D3, D4, and D4a state this behavior consistently.docs/development/specs/2026-07-28-country-capability-design.md-415-422 (1)
415-422: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winDocument the required capability test modules.
The proposed tree omits
test_notation.py,test_contract.py, andtest_data.py, although this capability has all three surfaces. Add the modules or state why their coverage is intentionally combined.🤖 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 `@docs/development/specs/2026-07-28-country-capability-design.md` around lines 415 - 422, Update the “Test structure” section to include test_notation.py, test_contract.py, and test_data.py alongside the existing capability test modules, or explicitly state why coverage for each omitted surface is intentionally combined into another module.Source: Coding guidelines
docs/development/research/2026-08-05-money-canonicalization.md-458-463 (1)
458-463: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftDo not enforce cross-grammar precedence in the grammar layer.
The grammars run independently, and the current engine preserves cross-grammar overlaps. A grammar cannot suppress a suffix match because another grammar matched a prefix. Move D6 resolution into an existing engine/result layer, or change the contract and tests to allow both candidates.
🤖 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 `@docs/development/research/2026-08-05-money-canonicalization.md` around lines 458 - 463, The canonicalization document’s D6 rule incorrectly requires grammar-level suppression across independent recognizers. Remove that requirement from the grammar contract and define precedence in the existing engine/result-resolution layer, or revise the documented behavior and tests to allow both prefix and suffix candidates; preserve the stated single-currency output only if resolution is moved outside the grammars.docs/development/specs/2026-07-28-country-capability-design.md-149-167 (1)
149-167: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDo not recognize every non-empty string as a country name.
This makes ordinary prose a recognition and changes unknown input from
MISSINGtoINVALID. The same document rejects unrestricted recognition for this reason. Use normalized known-name key sets, then preserve the input inCountryNotation; let rules assign meaning.🤖 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 `@docs/development/specs/2026-07-28-country-capability-design.md` around lines 149 - 167, Update the name_recognition grammar specification and implementation guidance to recognize only inputs present in normalized known-country-name key sets, rather than every non-empty string. Preserve the original input in CountryNotation.value, return no match for empty or unknown names, and leave semantic interpretation to the rules.docs/development/specs/2026-07-28-country-capability-design.md-44-48 (1)
44-48: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftSeparate standards provenance from Paxman successor-selection policy. ISO 3166-3 should support historical identifiers; product fallback mappings require Paxman policy provenance.
docs/development/specs/2026-07-28-country-capability-design.md#L44-L48: distinguish ISO historical data from policy-selected current successors.docs/development/specs/2026-08-03-f3-recognition-validation-boundary-design.md#L42-L53: preserve the same provenance split in the approved F3 design.🤖 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 `@docs/development/specs/2026-07-28-country-capability-design.md` around lines 44 - 48, Update the recognition and fallback specifications to separate ISO 3166-3 historical identifiers from Paxman policy-selected current successors. In docs/development/specs/2026-07-28-country-capability-design.md lines 44-48, document ISO historical-data provenance separately from successor-selection policy; apply the same provenance distinction in docs/development/specs/2026-08-03-f3-recognition-validation-boundary-design.md lines 42-53. Preserve the existing recognition categories while clarifying that product fallback mappings require Paxman policy provenance.Source: Learnings
docs/development/research/2026-08-05-isbn-canonicalization.md-454-462 (1)
454-462: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winCorrect the disabled range-validation status.
When
include_range_validation=False, the range rule is not run. A check-digit-valid ISBN in an unallocated range must still produceSUCCESS, as stated in Lines 460-462.INVALIDapplies only when range validation is enabled and rejects the range.🤖 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 `@docs/development/research/2026-08-05-isbn-canonicalization.md` around lines 454 - 462, Update the documented disabled behavior for include_range_validation so a check-digit-valid ISBN in an unallocated range produces SUCCESS when the feature is false; reserve INVALID for cases where range validation is enabled and rejects the range, keeping the requires_features explanation consistent.docs/development/research/2026-08-05-isbn-canonicalization.md-300-317 (1)
300-317: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winRemove replay-hash requirements from this design.
The architecture summary still claims a SHA-256 replay hash. The property-test plan also requires replay-hash differences. The current repository contract removes this artifact. Replace these statements with snapshot-scoped deterministic canonical values and candidate/provenance assertions.
Also applies to: 523-534
[skip_comment]⛔ Skipped due to learnings
Learnt from: azaharizaman Repo: azaharizaman/paxman-python PR: 2 File: docs/superpowers/plans/2026-07-28-country-capability-implementation.md:13-40 Timestamp: 2026-07-28T09:50:44.364Z Learning: In this repository, files under `docs/superpowers/plans/` are prospective implementation plans, not retrospective documentation. During reviews, the implemented package layout takes precedence; do not flag a plan merely because it differs from the final implementation unless the plan itself is expected to be executed or maintained as current guidance.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/capabilities/**/grammar/**/*.py : Grammars may only recognize input and return span-bearing `RecognitionMatch` values; they must not validate, deduplicate, order, map tokens to canonical values, or import rule-layer data.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/capabilities/AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:56.148Z Learning: Applies to paxman/capabilities/*/grammar/**/*.py : Grammars must be syntax-only recognizers: they may extract and sanitize span-bearing `RecognitionMatch` values, but must not validate, deduplicate, order, or map tokens to canonical values.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/core/AGENTS.md:0-0 Timestamp: 2026-08-11T15:29:07.957Z Learning: Applies to paxman/core/domain.py : `Grammar` subclasses must declare `name`, and `recognize()` must return only span-bearing `RecognitionMatch` objects, never bare notation.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/capabilities/**/*.py : Follow the per-capability layout: `notation.py`, `contract.py`, `capability.py`, `grammar/`, and `rules/`.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/core/AGENTS.md:0-0 Timestamp: 2026-08-11T15:29:07.957Z Learning: Applies to paxman/core/**/*.py : Do not raise from `Rule.matches()` or `normalize()` internals; the engine must surface rule and grammar failures as `RecognitionError` or `ValidationError`, not ad-hoc exceptions.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/core/AGENTS.md:0-0 Timestamp: 2026-08-11T15:29:07.957Z Learning: Applies to paxman/core/domain.py : Define pipeline value objects with `dataclass(frozen=True, slots=True)`. Enforce half-open spans and `len(raw_text) == end - start` in `__post_init__`; lowercase `GrammarRule` names; safe hashing for unhashable `RecognizedRep` notations; and tuple-ize `Candidate._provenance` from its `init=False` field.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/capabilities/AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:56.148Z Learning: Applies to paxman/capabilities/*/capability.py : Capabilities must wire grammars through `get_grammars()`, rules through `get_rules()`, contracts through static `create_contract()`, and expose `format_value()` as the only presentation seam.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/capabilities/AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:56.148Z Learning: Applies to paxman/capabilities/*/{contract.py,capability.py,grammar/**/*.py,rules/**/*.py} : Input-shape features must gate grammars through `active_grammars`, while authority features must gate rules through `requires_features`; never gate inside `matches()` or by reading `include_*` flags directly.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/capabilities/AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:56.148Z Learning: Applies to paxman/capabilities/*/grammar/*.py : Use one grammar file per recognizer, with a unique snake_case name in the form `{format}_recognition`.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/engine/orchestrator.py : `run_capability()` must preserve the full recognize → validate → resolve → hash pipeline.🤖 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 `@docs/development/research/2026-08-05-isbn-canonicalization.md` around lines 300 - 317, Remove replay-hash claims from the architecture summary and the property-test plan sections around the referenced design statements. Replace them with snapshot-scoped deterministic canonical-value expectations and assertions covering candidate values and provenance, while preserving the existing recognition, validation, and status behavior.docs/development/research/2026-08-05-money-canonicalization.md-598-605 (1)
598-605: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winRemove replay-hash serialization from the contract design.
_extra_dict_fields()is described as making a replay hash reflectprecisionanddollar_sign_currency. The current determinism contract no longer exposes a replay hash. Test these fields through canonical values and provenance instead.🤖 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 `@docs/development/research/2026-08-05-money-canonicalization.md` around lines 598 - 605, Update the contract design to remove the replay-hash rationale for `_extra_dict_fields()` and stop describing serialization of `precision` and `dollar_sign_currency`. Specify that these fields are validated through canonical values and provenance instead, while preserving the existing parameter, output-format, and presentational-only behavior.docs/development/research/2026-08-06-url-canonicalization.md-14-18 (1)
14-18: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winUse the snapshot-scoped determinism definition.
The document still defines canonicalization as “byte-identical” and keeps replay-hash wording in the test plan. Use the repository definition: identical inputs and contracts produce the same canonical output within a fixed snapshot. Test candidate values and provenance authorities instead.
Also applies to: 34-40, 326-334, 389-391
🤖 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 `@docs/development/research/2026-08-06-url-canonicalization.md` around lines 14 - 18, Update the document’s determinism definition to require identical canonical output only for identical inputs and contracts within a fixed snapshot, rather than unconditional “byte-identical” output. Remove replay-hash wording from the test plan and revise the affected sections to test candidate values and provenance authorities instead, preserving the WHATWG pipeline and RFC/UTS `#46` source references.docs/development/research/2026-08-09-si-unit-canonicalization.md-203-203 (1)
203-203: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDefine one
upolicy for all layers.Line 203 accepts
uas an alias forDa, but lines 267–270 reject bareuand accept only the name form. Specify whether grammar data recognizesu, whether rule data maps it toDa, and whether tests expectDaorINVALID.🤖 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 `@docs/development/research/2026-08-09-si-unit-canonicalization.md` at line 203, Define a single consistent policy for the `u` symbol across the grammar, rule data, and tests: recognize bare `u` in grammar data, map it to canonical `Da` in the rules, and update tests to expect `Da` rather than `INVALID`; keep the name-form alias behavior aligned with this policy.docs/development/research/2026-08-09-si-unit-canonicalization.md-14-21 (1)
14-21: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winRemove replay-hash and byte-identical-output requirements.
The document still lists replay-hash literals and a replay-hash baseline. The current PR removes that mechanism and defines determinism as stable canonical output within a fixed snapshot. Replace the baseline with candidate-value and provenance-authority assertions.
Also applies to: 431-459
🤖 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 `@docs/development/research/2026-08-09-si-unit-canonicalization.md` around lines 14 - 21, Update the research document’s determinism and validation guidance to remove replay-hash literals, replay-hash baselines, and byte-identical-output requirements. Define determinism as stable canonical output within a fixed data snapshot, and replace the removed baseline with assertions covering candidate values and provenance authority. Apply the same cleanup to the additional section referenced in the comment.docs/development/research/2026-08-05-money-canonicalization.md-518-525 (1)
518-525: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftSeparate minor-unit data from routed validation rules.
SectionMinorUnitstargets all grammars but only suppliesCcyMnrUnts. The engine requires every routed rule to implementmatches()andnormalize()and to emit a candidate. StoreMINOR_UNITSin rule data or a shared helper, and let each representation rule use it.🤖 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 `@docs/development/research/2026-08-05-money-canonicalization.md` around lines 518 - 525, Separate SectionMinorUnits from the routed validation rules: remove it as a grammar-targeted rule and store its authoritative CcyMnrUnts data in rule data or a shared helper. Ensure each code, symbol, and word representation rule independently implements matches(), normalize(), and candidate emission while reusing MINOR_UNITS for amount normalization and quantization.docs/development/research/2026-08-06-url-canonicalization.md-296-307 (1)
296-307: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftAlign fatal URL handling with the engine status contract.
- Treat a recognized fatal span as
Resolution.INVALID, notMISSING.- Define an explicit recovery-metadata channel.
Provenancecurrently stores authority citations only and has no recovery-event field.🤖 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 `@docs/development/research/2026-08-06-url-canonicalization.md` around lines 296 - 307, Update the WHATWG URL Standard rule’s fatal-validation path to return Resolution.INVALID for recognized fatal spans, while preserving no-resolution behavior for unrecognized input. Extend Provenance with an explicit recovery-events field and populate it for silent parser recoveries, without conflating recovery metadata with authority citations.docs/development/research/2026-08-09-si-unit-canonicalization.md-60-72 (1)
60-72: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy liftSeparate the 2022 prefix data from the 2019 provenance.
yearfilters complete rules bypublication_year <= contract.year. The proposed 2019-stamped rule includes quetta, ronna, ronto, and quecto, soyear=2019would accept post-2019 symbols. Use separate 2022 provenance for these prefixes, or state thatyearis not a historical snapshot mechanism. Add tests foryear=2019andyear=2022.🤖 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 `@docs/development/research/2026-08-09-si-unit-canonicalization.md` around lines 60 - 72, Separate the quetta, ronna, ronto, and quecto prefix rules from the 2019 BIPM provenance by assigning them 2022 publication provenance, while retaining the 2019 provenance for the original SI rules. Ensure year-based filtering excludes these prefixes for year=2019 and includes them for year=2022, and add coverage for both cases.
🟡 Minor comments (14)
AGENTS.md-65-65 (1)
65-65: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse one fixed-snapshot determinism definition across the documentation. The current wording in these files can imply stability across library, registry, or rule-data changes, while
ARCHITECTURE.mdcorrectly scopes the guarantee to a fixed snapshot.
AGENTS.md#L65-L65: add the fixed library-snapshot qualifier.CONTEXT.md#L9-L11: require the same input, contract, and library snapshot.SECURITY.md#L24-L24: add the same scope to the security-policy statement.TESTING_STRATEGY.md#L3-L3: define test determinism within a fixed library snapshot.🤖 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 `@AGENTS.md` at line 65, Use one fixed-library-snapshot determinism definition across all four documentation sites: update AGENTS.md lines 65-65, CONTEXT.md lines 9-11, SECURITY.md lines 24-24, and TESTING_STRATEGY.md lines 3-3 to scope deterministic behavior to the same input, contract, and library snapshot, matching ARCHITECTURE.md.docs/development/plans/2026-07-26-contract-params-hypothesis-tests.md-17-17 (1)
17-17: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAdd language identifiers to the development-document fences.
The affected files contain repeated MD040 violations. Add the correct language identifier to every opening fence.
docs/development/plans/2026-07-26-contract-params-hypothesis-tests.md#L17-L17: mark the fences at Lines 17 and 48.docs/development/plans/2026-08-02-capability-surface-homogeneity.md#L205-L205: mark the fence at Line 205.docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md#L114-L114: mark the fences at Lines 114, 150, 169, 214, 247, 288, 327, 360, 392, 420, 455, and 497.docs/development/plans/2026-08-11-adr0003-semantic-affinity-routing.md#L237-L237: mark the fences at Lines 237, 334, 399, 448, 510, 548, 585, 618, and 667.docs/development/report/architecture-review-2026-07-26.md#L176-L176: mark the fences at Lines 176, 185, 194, and 206.🤖 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 `@docs/development/plans/2026-07-26-contract-params-hypothesis-tests.md` at line 17, Add the appropriate language identifier to every opening Markdown code fence at the specified sites: docs/development/plans/2026-07-26-contract-params-hypothesis-tests.md lines 17 and 48; docs/development/plans/2026-08-02-capability-surface-homogeneity.md line 205; docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md lines 114, 150, 169, 214, 247, 288, 327, 360, 392, 420, 455, and 497; docs/development/plans/2026-08-11-adr0003-semantic-affinity-routing.md lines 237, 334, 399, 448, 510, 548, 585, 618, and 667; and docs/development/report/architecture-review-2026-07-26.md lines 176, 185, 194, and 206. Choose each identifier based on the fenced content.Source: Linters/SAST tools
docs/development/plans/2026-07-26-contract-params-hypothesis-tests.md-15-30 (1)
15-30: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAdd the missing Date contract file to the inventory.
Lines 18-30 omit
paxman/capabilities/Date/contract.py, but Line 684 importsDateContractfrom that module and Lines 736-771 define it. Add the module to theFiles to Createtree. A worker that follows the inventory can miss this required file.🤖 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 `@docs/development/plans/2026-07-26-contract-params-hypothesis-tests.md` around lines 15 - 30, Add paxman/capabilities/Date/contract.py to the Files to Create inventory, noting that it contains DateContract. Keep the existing capability.py entry and other file descriptions unchanged.docs/development/plans/2026-08-11-adr0003-semantic-affinity-routing.md-3-5 (1)
3-5: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winMark the plan as complete.
Line 5 says Tasks 3-10 are pending, but Lines 22-35 state that all ten tasks landed. Update the status and execution preamble to the completed state. The current contradiction can cause a worker to rerun completed tasks.
Also applies to: 22-35
🤖 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 `@docs/development/plans/2026-08-11-adr0003-semantic-affinity-routing.md` around lines 3 - 5, Update the plan metadata and execution preamble in the ADR0003 document to mark the work complete, replacing the pending Tasks 3-10 status with the completed state consistent with the task summaries in the execution section. Ensure no text suggests completed tasks should be rerun.docs/development/plans/2026-08-02-capability-surface-homogeneity.md-203-210 (1)
203-210: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRun import-linter through uv.
Line 210 is the only command in this verification block without
uv run. Change it touv run import-linter lintso the check uses the same project environment as the other commands.Proposed fix
-import-linter lint # boundaries intact +uv run import-linter lint # boundaries intact🤖 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 `@docs/development/plans/2026-08-02-capability-surface-homogeneity.md` around lines 203 - 210, Update the “Verification gates” command block so the import-linter check runs as “uv run import-linter lint,” matching the project environment used by the other verification commands.docs/development/plans/2026-08-03-f2-include-feature-gating.md-80-87 (1)
80-87: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winAdd blank lines around both Markdown tables.
markdownlint-cli2reports MD058 at Line 81 and Line 87. Add one blank line before and after each table so the plan passes its documented lint gate.🤖 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 `@docs/development/plans/2026-08-03-f2-include-feature-gating.md` around lines 80 - 87, Add blank lines immediately before and after both Markdown tables in the plan, including the tables under “Authority features” and “Input-shape features,” while leaving their content unchanged so markdownlint MD058 passes.Source: Linters/SAST tools
docs/development/plans/2026-08-04-recognition-homogeneity.md-642-643 (1)
642-643: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winRemove the blank line between adjacent blockquotes.
markdownlint-cli2reports MD028 at Line 643. Remove the blank line or prefix it with>so the post-hoc correction remains part of the same blockquote.🤖 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 `@docs/development/plans/2026-08-04-recognition-homogeneity.md` around lines 642 - 643, Remove the blank line between the adjacent blockquote lines in the recognition homogeneity plan, or prefix that line with “>”, so the replay-hash correction remains part of one continuous blockquote and satisfies markdownlint MD028.Source: Linters/SAST tools
docs/development/plans/2026-08-04-recognition-homogeneity.md-108-108 (1)
108-108: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winKeep removal warnings outside fenced Python examples. The inserted blockquotes render as code when placed inside the examples, so they are not visible warnings and can corrupt copied snippets.
docs/development/plans/2026-08-04-recognition-homogeneity.md#L108-L108: move the warning outside the baseline Python example.docs/development/plans/2026-08-05-isbn-capability.md#L1170-L1170: move the warning outside the property-test Python example.docs/development/plans/2026-08-05-money-capability.md#L4763-L4763: move the warnings at Lines 4763, 4809, and 4846 outside the property-test Python example.🤖 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 `@docs/development/plans/2026-08-04-recognition-homogeneity.md` at line 108, Move the replay-hash removal warning at docs/development/plans/2026-08-04-recognition-homogeneity.md:108-108 outside the surrounding fenced Python example. Apply the same placement fix to the warning at docs/development/plans/2026-08-05-isbn-capability.md:1170-1170 and the warnings at docs/development/plans/2026-08-05-money-capability.md:4763-4763, 4809, and 4846, keeping each warning rendered as Markdown rather than Python code.docs/development/plans/2026-08-06-url-capability.md-292-304 (1)
292-304: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winMark the replay-hash task as historical or rewrite it.
Task 10 is still presented as executable guidance and instructs implementers to add
replay_hashbaseline assertions. The PR context states that replay-hash was removed. Following this task will target a removed API.Add the removal warning used by the other development plans, or replace the task with the current determinism checks before treating this plan as executable.
🤖 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 `@docs/development/plans/2026-08-06-url-capability.md` around lines 292 - 304, Update Task 10 in the development plan to stop presenting replay_hash baseline assertions as executable work now that the API is removed. Mark the task historical using the removal warning pattern used by other plans, or replace its steps with the current URL determinism checks; remove guidance that targets register_capability replay-hash tests and baseline literals.docs/development/plans/2026-08-03-f3-recognition-validation-boundary.md-400-400 (1)
400-400: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the replay-hash document path.
The warnings reference
docs/adr/0002-remove-replay-hash.md, but the supplied stack context relocates this artifact todocs/development/plans/2026-08-10-adr0002-remove-replay-hash.md. Update all three references, or verify that the old path still exists.Also applies to: 441-441, 478-478
[skip_comment]⛔ Skipped due to learnings
Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/**/*.py : Never guess, infer, or suggest; identical input and contract must produce byte-identical output.🤖 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 `@docs/development/plans/2026-08-03-f3-recognition-validation-boundary.md` at line 400, Update all three replay-hash warning references in this document to the relocated artifact path docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md, or confirm and retain the old path only if that file still exists.docs/development/plans/2026-08-04-centralize-output-format.md-9-9 (1)
9-9: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the replay-hash document path in every warning.
These warnings point to
docs/adr/0002-remove-replay-hash.md. The supplied stack context lists the relocated artifact atdocs/development/plans/2026-08-10-adr0002-remove-replay-hash.md. Use the current path consistently.Also applies to: 30-30, 46-46, 56-56, 60-60, 64-64, 75-75, 102-102, 148-148, 306-306, 326-326, 360-360, 414-414, 418-418
[skip_comment]⛔ Skipped due to learnings
Learnt from: azaharizaman Repo: azaharizaman/paxman-python PR: 2 File: docs/superpowers/plans/2026-07-28-country-capability-implementation.md:13-40 Timestamp: 2026-07-28T09:50:44.364Z Learning: In this repository, files under `docs/superpowers/plans/` are prospective implementation plans, not retrospective documentation. During reviews, the implemented package layout takes precedence; do not flag a plan merely because it differs from the final implementation unless the plan itself is expected to be executed or maintained as current guidance.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/**/*.py : Never guess, infer, or suggest; identical input and contract must produce byte-identical output.🤖 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 `@docs/development/plans/2026-08-04-centralize-output-format.md` at line 9, Update every warning referencing the replay-hash ADR in this document to use the relocated path docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md, including all occurrences of the replay_hash removal warning, while leaving the warning content otherwise unchanged.docs/development/plans/2026-08-04-recognition-homogeneity.md-14-14 (1)
14-14: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the replay-hash document path in every warning.
These warnings reference
docs/adr/0002-remove-replay-hash.md. The relocated document listed in the stack context isdocs/development/plans/2026-08-10-adr0002-remove-replay-hash.md.Also applies to: 34-34, 68-68, 89-89, 95-95, 99-99, 103-103, 108-108, 116-116, 177-177, 185-185, 194-194, 642-642, 1209-1209, 1556-1556, 1560-1560, 1564-1564, 1580-1580
🤖 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 `@docs/development/plans/2026-08-04-recognition-homogeneity.md` at line 14, Update every warning in the recognition homogeneity plan that references docs/adr/0002-remove-replay-hash.md to use docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md instead, including all listed occurrences.docs/development/plans/2026-08-05-isbn-capability.md-22-22 (1)
22-22: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the replay-hash document path in every warning.
These warnings reference
docs/adr/0002-remove-replay-hash.md. The supplied stack context lists the relocated document atdocs/development/plans/2026-08-10-adr0002-remove-replay-hash.md.Also applies to: 62-62, 171-171, 1170-1170, 1183-1183, 1188-1188, 1192-1192, 1214-1214, 1220-1220, 1228-1228, 1232-1232, 1236-1236
[skip_comment]⛔ Skipped due to learnings
Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/capabilities/ISBN/rules/data/range_message.py : Regenerate ISBN range data only through `tools/regenerate_isbn_range_data.py` from the XML snapshot.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: paxman/capabilities/AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:56.148Z Learning: Applies to paxman/capabilities/**/rules/data/**/*.{py,json,csv} : Generated data may be edited only through its source snapshot and generator; currently ISBN range data must be regenerated with `tools/regenerate_isbn_range_data.py`. Unmarked data files may be edited directly.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/**/*.py : Never guess, infer, or suggest; identical input and contract must produce byte-identical output.🤖 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 `@docs/development/plans/2026-08-05-isbn-capability.md` at line 22, Update every warning in this document that references docs/adr/0002-remove-replay-hash.md, including the listed occurrences, to use docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md instead; leave the warning text and surrounding content unchanged.docs/development/plans/2026-08-05-money-capability.md-7-7 (1)
7-7: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winUpdate the replay-hash document path in every warning.
These warnings reference
docs/adr/0002-remove-replay-hash.md. The supplied stack context lists the relocated document atdocs/development/plans/2026-08-10-adr0002-remove-replay-hash.md.Also applies to: 545-545, 4714-4714, 4763-4763, 4809-4809, 4846-4846, 4898-4898, 4903-4903, 4907-4907, 4913-4913, 4953-4953, 4957-4957, 4973-4973, 4985-4985, 4996-4996, 5092-5092
[skip_comment]⛔ Skipped due to learnings
Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: tests/AGENTS.md:0-0 Timestamp: 2026-08-11T15:29:18.173Z Learning: Applies to tests/property/test_money_properties.py : `test_money_properties.py` is the sole documented exception to the property-test registry restriction and may test full-pipeline invariants using a local `_fresh_registry` fixture documented in the module.Learnt from: azaharizaman Repo: azaharizaman/paxman-python PR: 2 File: docs/superpowers/plans/2026-07-28-country-capability-implementation.md:13-40 Timestamp: 2026-07-28T09:50:44.364Z Learning: In this repository, files under `docs/superpowers/plans/` are prospective implementation plans, not retrospective documentation. During reviews, the implemented package layout takes precedence; do not flag a plan merely because it differs from the final implementation unless the plan itself is expected to be executed or maintained as current guidance.Learnt from: CR Repo: azaharizaman/paxman-python PR: 0 File: AGENTS.md:0-0 Timestamp: 2026-08-11T15:28:43.911Z Learning: Applies to paxman/**/*.py : Never guess, infer, or suggest; identical input and contract must produce byte-identical output.🤖 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 `@docs/development/plans/2026-08-05-money-capability.md` at line 7, Update every warning in the document that references docs/adr/0002-remove-replay-hash.md to use docs/development/plans/2026-08-10-adr0002-remove-replay-hash.md instead, including all occurrences listed in the review. Preserve the surrounding warning text and formatting.
🧹 Nitpick comments (1)
docs/development/plans/2026-08-06-url-capability.md (1)
21-26: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winOmit
active_grammarsfor this non-feature-gated capability.The supplied capability contract guidance says to use
active_grammarsonly when recognition is feature-gated. The URL plan declares no feature flags, but hard-codes("absolute_uri_recognition",). Omit the property and let the engine runget_grammars()so future grammars are not silently excluded.Also applies to: 198-205, 211-219
🤖 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 `@docs/development/plans/2026-08-06-url-capability.md` around lines 21 - 26, Remove the hard-coded active_grammars declaration from URLCapabilityContract and the corresponding URL plan sections. Keep the capability ungated with no feature flags, allowing the engine to derive grammars through get_grammars() so future URL grammars are included automatically.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 705bf6db-f69c-442b-b1a8-13f298e46fab
📒 Files selected for processing (38)
AGENTS.mdARCHITECTURE.mdCONTEXT.mdHOW_TO_ADD_NEW_CAPABILITY.mdHOW_TO_ADD_NEW_GRAMMAR.mdREADME.mdSECURITY.mdTESTING_STRATEGY.mddocs/development/AGENTS.mddocs/development/plans/2026-07-26-contract-params-hypothesis-tests-revised.mddocs/development/plans/2026-07-26-contract-params-hypothesis-tests.mddocs/development/plans/2026-07-26-email-capability.mddocs/development/plans/2026-07-28-country-capability-implementation.mddocs/development/plans/2026-08-01-phone-number-capability.mddocs/development/plans/2026-08-02-capability-surface-homogeneity.mddocs/development/plans/2026-08-03-f1-grammar-rule-affinity.mddocs/development/plans/2026-08-03-f2-include-feature-gating.mddocs/development/plans/2026-08-03-f3-recognition-validation-boundary.mddocs/development/plans/2026-08-04-centralize-output-format.mddocs/development/plans/2026-08-04-recognition-homogeneity.mddocs/development/plans/2026-08-05-isbn-capability.mddocs/development/plans/2026-08-05-money-capability.mddocs/development/plans/2026-08-06-url-capability.mddocs/development/plans/2026-08-08-currency-capability.mddocs/development/plans/2026-08-09-si-units-capability.mddocs/development/plans/2026-08-10-adr0002-remove-replay-hash.mddocs/development/plans/2026-08-11-adr0003-semantic-affinity-routing.mddocs/development/report/architecture-review-2026-07-26.mddocs/development/report/recognition-handling-library-research.mddocs/development/research/2026-08-05-isbn-canonicalization.mddocs/development/research/2026-08-05-money-canonicalization.mddocs/development/research/2026-08-06-url-canonicalization.mddocs/development/research/2026-08-09-si-unit-canonicalization.mddocs/development/specs/2026-07-28-country-capability-design.mddocs/development/specs/2026-08-03-f3-recognition-validation-boundary-design.mdpaxman/core/extensions.pytests/integration/test_pipeline.pytests/property/test_money_properties.py
Summary
Replaces the imprecise "byte-identical output" determinism wording across the live knowledge-base docs and source/test docstrings with the precise determinism definition, and cleans up lingering references to the removed replay-hash mechanism.
AGENTS.md,CONTEXT.md,ARCHITECTURE.md,README.md,SECURITY.md,TESTING_STRATEGY.md,HOW_TO_ADD_NEW_CAPABILITY.md,HOW_TO_ADD_NEW_GRAMMAR.md.paxman/core/extensions.py,tests/property/test_money_properties.py; renamedtest_repeated_run_is_byte_identical->test_repeated_run_is_deterministicintests/integration/test_pipeline.py.replay_hashwere relocated underdocs/development/(git renames) and left untouched per the existing "replay-hash removed; do not use as a sample" notes.Determinism definition used
Given the same input and contract, the pipeline always yields the same canonical output — no world-knowledge, no clock, no environment-dependent ordering, no fuzzy logic, no network inference across recognition, validation, and canonicalization.
Notes
assert not hasattr(vs, "replay_hash")intests/unit/test_version_stamp.pyis preserved.byte-identical/replay-hashnow remain only indocs/development/historical files,docs/adr/0003-..., andcapability_homogeneity_audit.md— all intentionally left as historical record.Verification
uv run ruff check+ruff format --check: clean on edited files.uv run pytest tests/integration/test_pipeline.py -k repeated_run_is_deterministic: 7 passed.Summary by CodeRabbit
Documentation
Tests