Address Whitaker Dylint suite review follow-ups (leynos/netsuke#410 rollout) - #285
Address Whitaker Dylint suite review follow-ups (leynos/netsuke#410 rollout)#285leynos wants to merge 12 commits into
Conversation
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThe changes update movement deduplication, DBSP output application and rollback handling, primary-map path validation, Whitaker CI installation, lint execution, diagnostics, tests, and related documentation. ChangesBehaviour stream processing
DBSP output synchronisation
Map lifecycle handling
Tooling and diagnostics maintenance
Sequence Diagram(s)sequenceDiagram
participant BevyInput
participant DbspState
participant DbspCircuit
participant BevyOutput
BevyInput->>DbspState: begin and stash frame rollback state
BevyInput->>DbspCircuit: push cached inputs
BevyOutput->>DbspCircuit: step_circuit()
DbspCircuit-->>BevyOutput: outputs or step error
BevyOutput->>DbspState: rollback and clear inputs on error
BevyOutput->>BevyOutput: apply positive-weight outputs on success
BevyOutput->>DbspState: commit frame tracking on success
Possibly related PRs
Suggested labels: Suggested reviewers: Poem
Caution Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional.
❌ Failed checks (1 error, 3 warnings)
✅ Passed checks (16 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai Please suggest a fix for this issue and supply a prompt for an AI coding agent to enable it to apply the fix. Include the file and symbol names indicated in the issue at the head of your response. Ensure that this is validated against the current version of the codegraph. If further refinement to address this finding would be deleterious, please supply a clear explanatory one to two paragraph markdown message I can paste into the CodeScene web ui's diagnostic suppression function so this diagnostic can be silenced. src/dbsp_circuit/streams/behaviour/apply.rs Comment on lines +182 to +196 fn applies_movement_to_targeted_entity() {
let (circuit, (base_in, movement_in, out)) =
build_apply_circuit().expect("failed to build apply circuit");
base_in.push(position(1, 0.0, 0.0), 1);
movement_in.push(movement(1, 1.0, 0.0), 1);
circuit.step().expect("dbsp step");
// Entity 1 shifts by (1, 0) and is emitted exactly once.
let (moved, weight) = single_position(&collect_positions(&out));
assert_eq!(weight, 1);
assert_eq!(moved.entity, 1);
assert_relative_eq!(moved.x.into_inner(), 1.0);
assert_relative_eq!(moved.y.into_inner(), 0.0);
}❌ New issue: Code Duplication |
This comment was marked as resolved.
This comment was marked as resolved.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c07bc3a75c
ℹ️ 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".
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
@coderabbitai Have the following now been resolved? src/dbsp_circuit/streams/behaviour/decide.rs (1)
net-zero weight, then add north previous reset logic returns north, so this test protects the fixed order-sensitive behaviour. tests “must fail for plausible incorrect implementations.” 🤖 Detailed instructionsVerify each finding against current code. Fix only still-valid issues, skip the In Source: Coding guidelines |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
file="src/dbsp_circuit/streams/behaviour/decide.rs"
ast-grep outline "$file" --items all --view expanded
printf '\n--- accumulator implementation and tests ---\n'
rg -n -A35 -B12 \
'struct MovementAccumulator|impl MovementAccumulator|fn (merge|into_decision)|#\[test\]|accumulator|cancell|readdition|east|north' \
"$file"Length of output: 7408
The test invokes |
…ers guide Movement-dedupe weight oracle (fixes the multiplicity-2 test gap): - decide dedupe test helper now retains each consolidated row's Z-set weight and asserts multiplicity == 1, so a single decision emitted with weight 2 fails the test. The behavioural `duplicate_targets_produce_single_decision` test asserts the same on movement_decision_stream's output. - Split decide.rs into decide/mod.rs + decide/tests.rs to keep both within the module-line budget after retaining the weight. state.rs: document the frame-rollback lifecycle on `begin_frame_rollback` — the begin/record-undo/stash/commit-or-rollback sequence with text examples for both the successful-commit and failed-rollback paths (no behaviour change). Docs: - Add docs/users-guide.md documenting user-facing primary-map asset path validation (relative-only; rooted/UNC/drive-absolute and `..`-component paths rejected; substring `..` accepted), linked from docs/README.md. - Add a "Testing strategy for invariants" section to docs/developers-guide.md explaining the bounded near-exhaustive rstest matrices and the deliberate non-adoption of proptest/Kani/Verus (no new dependency). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
src/dbsp_circuit/streams/behaviour/decide/mod.rs (1)
172-186: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd a rustdoc example for the deduplication contract.
Show duplicate weighted input producing one normalized decision and net-zero input
producing no decision. As per coding guidelines, “Function documentation must
include clear usage and outcome examples”.Triage:
[type:docstyle]🤖 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 `@src/dbsp_circuit/streams/behaviour/decide/mod.rs` around lines 172 - 186, Expand the rustdoc example for dedupe_movement_decisions to show duplicate weighted MovementDecision inputs collapsing into one normalized decision, and show opposing inputs whose weights net to zero producing no decision. Use the existing function and MovementAccumulator contract, documenting both the input and resulting output behavior.Source: Coding guidelines
🤖 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/developers-guide.md`:
- Around line 42-44: Update the Rust code fences in the developer guide,
including the shown block and the additionally affected block, by replacing the
GitHub-unsupported `rust,ignore` fence identifier with `rust`. Leave the code
examples unchanged.
In `@docs/lille-physics-engine-design.md`:
- Around line 79-82: Update the synchronization-contract reference in the
documentation to use the inline Markdown link text “DBSP synchronization
developer's guide” targeting developers-guide.md, replacing the code-formatted
path while preserving the surrounding list and wording.
In `@docs/users-guide.md`:
- Around line 54-56: Update the Markdown link in the design-rationale reference
so the destination remains contiguous with the `](` marker, using either a
same-line destination or an angle-bracket destination; preserve the existing
link text and target.
- Around line 48-52: Update the primary_map validation description to state that
the plugin triggers and logs LilleMapError::InvalidPrimaryMapAssetPath before
skipping primary-map spawning. Remove the claim that runtime or test runs fail;
clarify that only test assertions may fail while the plugin continues without
panicking.
---
Outside diff comments:
In `@src/dbsp_circuit/streams/behaviour/decide/mod.rs`:
- Around line 172-186: Expand the rustdoc example for dedupe_movement_decisions
to show duplicate weighted MovementDecision inputs collapsing into one
normalized decision, and show opposing inputs whose weights net to zero
producing no decision. Use the existing function and MovementAccumulator
contract, documenting both the input and resulting output behavior.
🪄 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: 0c68ea94-9344-44e3-8e78-520fcc84d106
📒 Files selected for processing (10)
docs/README.mddocs/developers-guide.mddocs/lille-physics-engine-design.mddocs/users-guide.mdsrc/dbsp_circuit/streams/behaviour/decide/mod.rssrc/dbsp_circuit/streams/behaviour/decide/tests.rssrc/dbsp_circuit/streams/behaviour/tests.rssrc/dbsp_sync/output/tests/edge_cases.rssrc/dbsp_sync/state.rssrc/map/lifecycle/tests.rs
main independently added a general `docs/developers-guide.md` (the source of truth for the toolchain and Bevy dependency versions). This branch had created a `docs/developers-guide.md` documenting the DBSP synchronization contract — a distinct document that collided on the same filename during the rebase. Keep both: restore main's general developer guide at `developers-guide.md`, and move this branch's DBSP-sync guide to `docs/dbsp-synchronization-guide.md`. Repoint the docs index entry and the lille-physics-engine-design.md §2.1 cross-reference to the new path; main's toolchain/version references to `developers-guide.md` are left pointing at the general guide. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
99ed30c to
f22caf9
Compare
|
@coderabbitai Have the following now been resolved? src/dbsp_sync/state.rs (1)
🤖 Detailed instructionsVerify each finding against current code. Fix only still-valid issues, skip the In Source: Coding guidelines |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
file="src/dbsp_sync/state.rs"
printf '%s\n' '--- DbspState outline ---'
ast-grep outline "$file" --items all --view expanded
printf '%s\n' '--- frame rollback methods and their Rustdoc ---'
rg -n -A45 -B12 \
'///|pub\(crate\) fn (begin_frame_rollback|stash_frame_rollback|record_unsequenced_undo|commit_frame_tracking|rollback_frame_tracking)\s*\(' \
"$file"
printf '%s\n' '--- lifecycle call sites ---'
rg -n -A12 -B10 \
'\.(begin_frame_rollback|stash_frame_rollback|record_unsequenced_undo|commit_frame_tracking|rollback_frame_tracking)\s*\(' \
src/dbsp_sync/input/mod.rs src/dbsp_sync/output/mod.rs src/dbsp_sync/state.rsLength of output: 35188
Mark this finding as resolved.
The Rustdoc includes separate successful-commit and failed-step rollback examples, with stated outcomes. The implementation call sites match that documented order: Validation used current-head source-graph inspection. Run the documentation build and relevant test suite in CI/local tooling for executable validation. |
- dbsp-synchronization-guide.md: replace the GitHub-unsupported `rust,ignore` code-fence identifier with `rust` on both example blocks (code unchanged). - lille-physics-engine-design.md: make the DBSP-sync guide reference a proper inline link ([DBSP synchronization developer's guide]) instead of a code-formatted path. - users-guide.md: repair the design-rationale link whose destination had been split onto its own line (now contiguous with the `](` marker); and correct the primary-map rejection description — the plugin triggers and logs `LilleMapError::InvalidPrimaryMapAssetPath` before skipping the spawn and never panics, so only a test assertion (not a runtime run) could fail. - decide/mod.rs: expand the `dedupe_movement_decisions` rustdoc example to show duplicate weighted decisions collapsing into one normalized decision and weight-cancelling inputs (net-zero total weight) producing no decision. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@coderabbitai review |
✅ Action performedReview finished.
|
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
Code: - output/mod.rs: remove the empty `if delta.death` placeholder branch from `apply_one_health_delta`. - state: extract the shared reset in `begin_frame_rollback` and `commit_frame_tracking` into a private `clear_frame_rollback` helper. Split the module into `state/mod.rs` + `state/tests.rs` to stay within the module-line budget; the three basic tests now use the shared `#[from(state)]` fixture. - output/tests: `prime_state` uses the `push_velocity_input` helper; the negative-weight velocity test is now two-phase (asserts a +1 weight IS applied for an unsupported entity before asserting a -1 weight is skipped), so it fails if velocity output is never emitted. - output/tests/failure_paths: add `failed_step_rolls_back_applied_unsequenced`, a full-pipeline sibling that drives an unsequenced `DamageEvent` through the `DamageInbox`, forces a step error, and asserts `applied_unsequenced` is restored to its pre-frame value via the real cache-to-step path. Docs: - dbsp-synchronization-guide.md: document that `expected_health_retractions` is transient (cleared/rebuilt each cache pass, read only within the frame) and therefore excluded from rollback, reconciling the mutated-state list with the rollback methods; reword §6 to stop claiming the bounded `rstest` matrices are "equivalent" to property tests. - Add docs/adr-003-bounded-rstest-over-property-testing.md recording the bounded-exhaustive-`rstest`-over-property-testing decision as the documented, approved exception; index it in docs/README.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…rop death-hook doc - output/tests/failure_paths: rename/rework the unsequenced-damage rollback regression as `failed_step_rolls_back_unsequenced_damage_dedupe_state`, covering the absent-before-frame case through the real cache-to-step failure path — one unsequenced DamageEvent queued via DamageInbox, the stepper forced to fail, then asserting `applied_unsequenced` is restored to its exact pre-frame state (the entry the cache added is gone). Fails if `ingest_damage_events` stops calling `record_unsequenced_undo` before the dedupe mutation. - output/mod.rs: remove the stale "death hook" claim from `apply_one_health_delta`'s rustdoc (the no-op `delta.death` branch was already removed). - developers-guide.md: add a concise "DBSP synchronization" section (frame order, the five rollback methods and their call order, failed-step outcome, positive-weight-only output rule) linking to the detailed dbsp-synchronization-guide.md; existing content retained. No directly-related roadmap/execplan item exists for this rollback/output-safety work, so none were touched. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@coderabbitai resume@coderabbitai Have the following now been resolved? src/dbsp_sync/output/tests/mod.rs (1)
♻️ Proposed tidy-up- let state = app.world_mut().non_send_resource_mut::<DbspState>();
- state.circuit.velocity_in().push(
+ push_velocity_input(
+ app,
Velocity {
entity: 1,
vx: 1.0.into(),
vy: 0.0.into(),
vz: 0.0.into(),
},
1,
);As per coding guidelines, "Reuse equivalent in-repository implementations instead of introducing parallel implementations". 🤖 Detailed instructionsVerify each finding against current code. Fix only still-valid issues, skip the In Source: Coding guidelines src/dbsp_sync/state.rs (1)
♻️ Proposed adoption#[rstest]
- fn entity_lookup_uses_mapping() {
- let mut state = DbspState::new().expect("failed to initialise DbspState for tests");
+ fn entity_lookup_uses_mapping(#[from(state)] state_result: Result<DbspState, dbsp::Error>) {
+ let mut state = state_result.expect("failed to initialise DbspState for tests");
let entity = Entity::from_bits(42);As per coding guidelines, "Use 🤖 Detailed instructionsVerify each finding against current code. Fix only still-valid issues, skip the In Source: Coding guidelines |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '--- working tree ---'
git status --short
printf '%s\n' '--- output test module outline ---'
ast-grep outline src/dbsp_sync/output/tests/mod.rs --items all --view expanded
printf '%s\n' '--- output helpers and priming path ---'
rg -n -A42 -B12 \
'fn (prime_state|push_position_input|push_velocity_input)\s*\(' \
src/dbsp_sync/output/tests/mod.rs
printf '%s\n' '--- state test module outline ---'
ast-grep outline src/dbsp_sync/state.rs --items all --view expanded
printf '%s\n' '--- state fixture and specified tests ---'
rg -n -A45 -B14 \
'#\[fixture\]|fn (state|new_state_starts_empty|entity_lookup_uses_mapping|duplicate_counter_reports_value)\s*\(' \
src/dbsp_sync/state.rs
printf '%s\n' '--- direct DbspState construction in state tests ---'
rg -n -A5 -B5 \
'DbspState::new\s*\(\)\s*\.expect|DbspState::new\s*\(\)' \
src/dbsp_sync/state.rsLength of output: 5044 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '--- candidate state modules ---'
fd -t f -a 'state(\.rs)?' src
printf '%s\n' '--- DbspState declarations and state-test symbols ---'
rg -n -A50 -B16 \
'struct DbspState|impl DbspState|#\[fixture\]|fn (state|new_state_starts_empty|entity_lookup_uses_mapping|duplicate_counter_reports_value)\s*\(' \
src/dbsp_sync
printf '%s\n' '--- direct DbspState construction in DBSP sync tests ---'
rg -n -A6 -B6 \
'DbspState::new\s*\(\)\s*(?:\.expect)?' \
src/dbsp_syncLength of output: 25383
Mark both review findings resolved. Source-graph inspection confirms the refactors; run the formatter and relevant test suite in CI/local tooling for executable validation. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '--- relevant current files ---'
fd -t f . src docs .github | rg '(^|/)(input|output|state|failure_paths|edge_cases|tests|mod)\.rs$|developers-guide\.md$|dbsp.*guide\.md$|roadmap|execplan|plan'
printf '%s\n' '--- structure ---'
for file in \
src/dbsp_sync/input/mod.rs \
src/dbsp_sync/output/mod.rs \
src/dbsp_sync/output/tests/mod.rs \
src/dbsp_sync/output/tests/failure_paths.rs \
src/dbsp_sync/output/tests/edge_cases.rs \
src/dbsp_sync/state.rs \
src/dbsp_circuit/streams/behaviour/decide/tests.rs \
src/map/lifecycle/tests.rs
do
if [ -f "$file" ]; then
echo "### $file"
ast-grep outline "$file" --items all --view expanded
fi
done
printf '%s\n' '--- unsequenced input → rollback path and behavioural tests ---'
rg -n -A40 -B16 \
'\b(DamageInbox|DamageEvent|ingest_damage_events|record_unsequenced_undo|record_duplicate_unsequenced_damage|begin_frame_rollback|stash_frame_rollback|rollback_frame_tracking|step_failure|failed_step)\b' \
src/dbsp_sync
printf '%s\n' '--- output health-death hook ---'
rg -n -A35 -B15 \
'\bapply_one_health_delta\b|\bdelta\.death\b|Future hook|death hook' \
src/dbsp_sync/output
printf '%s\n' '--- bounded/property invariant coverage ---'
rg -n -i -A28 -B10 \
'\b(proptest|quickcheck|kani|verus|bounded|matrix|invariant|rollback|dedupe|non.?positive|negative.?weight|validate_asset_path)\b' \
src/dbsp_sync/state.rs \
src/dbsp_sync/output/tests \
src/dbsp_circuit/streams/behaviour/decide/tests.rs \
src/map/lifecycle/tests.rs \
Cargo.toml 2>/dev/null || true
printf '%s\n' '--- developer documentation and directly related planning artefacts ---'
for file in docs/developers-guide.md docs/dbsp-synchronization-guide.md docs/README.md; do
if [ -f "$file" ]; then
echo "### $file"
sed -n '1,360p' "$file"
else
echo "MISSING: $file"
fi
done
fd -t f . docs | rg -i '(roadmap|execplan|plan)' | sort | while read -r file; do
echo "### $file"
rg -n -i -A14 -B8 'dbsp|rollback|synchroni[sz]|whitaker|dylint|output' "$file" || true
doneLength of output: 251711
Run |
|
@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. (Treat documentation and validation coverage as in scope). ❌ Failed checks (1 error, 3 warnings)
|
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '%s\n' '--- relevant files ---'
fd -t f . src docs | rg '(^|/)(input|output|state|failure_paths|edge_cases|tests|mod)\.rs$|developers-guide\.md$|dbsp.*guide\.md$|roadmap|execplan|plan' | sort
printf '%s\n' '--- focused outlines ---'
for file in \
src/dbsp_sync/input/mod.rs \
src/dbsp_sync/output/mod.rs \
src/dbsp_sync/output/tests/failure_paths.rs \
src/dbsp_sync/state.rs \
src/dbsp_sync/state/mod.rs \
src/dbsp_sync/state/tests.rs \
src/dbsp_circuit/streams/behaviour/decide/tests.rs \
src/map/lifecycle/tests.rs
do
if [ -f "$file" ]; then
echo "### $file"
ast-grep outline "$file" --items all --view expanded
fi
done
printf '%s\n' '--- unsequenced damage ingestion, failure rollback, and behavioural regression ---'
rg -n -A55 -B18 \
'\b(DamageInbox|DamageEvent|ingest_damage_events|record_unsequenced_undo|record_duplicate_unsequenced_damage|rollback_frame_tracking|failed_step_rolls_back_unsequenced_damage_dedupe_state|force.*fail|step_failure)\b' \
src/dbsp_sync
printf '%s\n' '--- health-output implementation and dormant death hook search ---'
rg -n -A45 -B18 \
'\b(apply_one_health_delta|apply_health_deltas|delta\.death|Future hook|death hook)\b' \
src/dbsp_sync/output
printf '%s\n' '--- bounded invariant and output-weight coverage ---'
rg -n -i -A32 -B10 \
'\b(applied_unsequenced_rollback_matrix|dedupe_emits_one_decision_for_positive_weight_and_none_for_zero|validate_asset_path_component_matrix|negative_weight_(position|velocity|health)|bounded|matrix|invariant)\b' \
src/dbsp_sync src/dbsp_circuit/streams/behaviour/decide src/map/lifecycle
printf '%s\n' '--- developer documentation ---'
for file in docs/developers-guide.md docs/dbsp-synchronization-guide.md; do
if [ -f "$file" ]; then
echo "### $file"
rg -n -A22 -B8 \
'DBSP|synchroni[sz]|begin_frame_rollback|record_unsequenced_undo|stash_frame_rollback|commit_frame_tracking|rollback_frame_tracking|positive.weight|Whitaker|make lint|CI' \
"$file"
else
echo "MISSING: $file"
fi
done
printf '%s\n' '--- DBSP-related roadmap/plan references ---'
fd -t f . docs | rg -i '(roadmap|execplan|plan)' | while read -r file; do
echo "### $file"
rg -n -i -A12 -B8 'dbsp|synchroni[sz]|rollback|whitaker|dylint' "$file" || true
doneLength of output: 236047
Run |
Summary
This pull request addresses the review feedback on the Whitaker Dylint suite adoption (merged in #269), part of the estate-wide rollout that began with leynos/netsuke#410. Each review finding was re-verified against the current tree before being changed; still-valid issues were fixed and the rest skipped with a reason.
Changes
CI
whitaker-installeronly when its--versionoutput matches the pinnedWHITAKER_INSTALLER_VERSION, rather than trustingcommand -valone; a mismatched binary triggers a fresh install.Behavioural streams (
src/dbsp_circuit/streams/behaviour/)apply_movementnow folds duplicate decisions per entity before the join, sharingdecide.rs'sdedupe_movement_decisionshelper, so the join can never apply a doubled delta. Added end-to-end tests feeding base positions plus movement decisions (including duplicates) and asserting the emitted positions.total_weight == 0reset blocks fromMovementAccumulator::apply/merge;into_decision's zero-weight handling is unchanged.StreamConcattrait — the call site now usesfears.plus(&missing)directly — and dropped a redundantfearsclone.build_decision_circuitfixture for all three previously-inlined circuit builds, and the#[expect(unused_mut)]binding is gone.DBSP output application (
src/dbsp_sync/output/)apply_output_records!macro with explicitresolve_write_target/resolve_health_targethelpers, removing the pattern-fragment binding and thecognitive_complexitysuppression.applied_healthor the world handle.apply_dbsp_outputs_systemclears circuit inputs on the step-error path too, so buffered inputs cannot replay on the next tick.Map lifecycle (
src/map/lifecycle.rs)/and rejects only whole..components, so filenames such asmaps/primary..backup.tmxare accepted; added a covering case.build_spawn_rejects_invalid_path_without_spawningnow registers an observer forInvalidPrimaryMapAssetPathand asserts it fired, so the test cannot pass spuriously when theAssetServeris absent.monitor_primary_map_load_stateborrowstracking.handle.as_ref()instead of cloning it.Documentation and tooling
-izespelling for initialize/initialization inplugin.rsandlogging.rsprose (identifiers left untouched).Makefilelintrecipe gainedset -euo pipefailso a failing Clippy step is no longer masked by the.ONESHELLexit code — the gate was previously reporting success even when Clippy failed.Deliberately not changed
#[expect(clippy::too_many_arguments)]/#[expect(clippy::needless_pass_by_value)]suppressions inlifecycle.rswere left in place: only one istoo_many_arguments, and all three document permanent Bevy observer/system-signature constraints rather than in-progress work. They are load-bearing#[expect]s — removing them re-triggers the very lints — and there is no issue to reference because there is no pending work to track.docs/developers-guide.mdand for property/proof tests (proptest/Kani/Verus) are out of scope for this minimal follow-up; the concrete example tests requested inline were added.Validation
make check-fmt,make lint(Clippy and the Whitaker Dylint suite),make typecheck, andmake testall pass — 162 unit tests, all integration/behavioural suites, and 42 doc-tests, with 0 failures.References
🤖 Generated with Claude Code