Skip to content

test(operations): organize local-operation regression owners - #1065

Merged
l0gicgate merged 1 commit into
mainfrom
test/763-operation-tests
Sep 16, 2026
Merged

l0gicgate merged 1 commit into
mainfrom
test/763-operation-tests

Conversation

@l0gicgate

Copy link
Copy Markdown
Contributor

Description

Organize 78 unchanged local-operation test cases into nine responsibility modules and the existing deletion/restore owners. Keep shared fixtures and both script-facing manual deletion benchmarks in the parent, and consolidate three event-pump loops without changing their terminal conditions.

Document the ownership/filter map so filesystem races, replacement, cancellation, native-name handling, and conflict behavior remain discoverable. No production code or test assertions change. This is a bounded organization/fixture pass, not removal of every retained finding; measurements and preservation evidence are in the validation comment.

Visual evidence

N/A — test organization and shared fixture code only; no application UI changes.

How to test

  1. Follow the ownership map in docs/e2e-testing.md to locate replacement, deletion, restore, and undo regressions.
  2. Compare the relocated cases: their assertions, synchronization, injected failures, and cleanup are unchanged; only module paths differ.
  3. Confirm scripts/benchmark-delete.sh still addresses the original parent-module benchmark names, and inspect the shared waiter callers' distinct terminal sets.

Expected result: The same regression scenarios and benchmark entry points remain available, with clearer owners and one event-pump mechanism.

Related issue

Addresses unit 26 of #763; keep the umbrella open and check off this unit only after merge and Cloud verification.

Based on merged #1063, which fixed the unrelated full-suite blocker. Open #1061 and #320 also add cases to the parent test file; preserve their new coverage when integrating those features, using the documented owners rather than duplicating existing cases.

@l0gicgate

Copy link
Copy Markdown
Contributor Author

Scope and preservation

Baseline: 4b7cf86a9ad85566504c227ce3c7444cd3d9cd09; final base: 03b00f840ba850ab42e462c3a88c13ea48dc6642 (only the separate #1063 fixture fix was added). No production changes.

  • SHA-256 comparison verifies 78 byte-identical moved test bodies: paths 3, copy 10, moves 7, replacement 10, conflicts 9, progress 4, naming 7, paste results 4, undo 3, existing deletion +15, existing restore safety +6.
  • Existing deletion/restore files remain exact prefixes; new owners contain only the preserved cases and use super::*. Added parent imports keep qualified super:: calls bound to the same production items.
  • Before/after compiled inventories contain 194 unique operation cases, with exactly the expected 78 module-path changes. The earlier native execution passed 191, with 3 existing ignored; final full pinned execution includes the affected cases again.
  • Both manual benchmark bodies, ignore attributes, and fully qualified names are unchanged. The documented replacement filter selects 10 cases; documentation paths and benchmark references were checked.
  • Non-test-body diff reviewed separately: only imports/module declarations and the shared event pump change. No assertion, filesystem fixture, lock, race injection, cleanup, or case-specific wait loop was removed.

The shared waiter's condition borrow still ends before pumping the default GLib context. Caller contracts remain distinct:

Caller Terminal events
restore Restored, RestoreCompletedWithErrors, Failed, Cancelled
transfer Pasted, TransferFailed, Cancelled
paste-created result collector Pasted, TransferFailed (not widened to Cancelled)

Operation-handle lifetimes, final result assertions, and event ordering remain unchanged.

Final local validation

Risk scope includes shared asynchronous test fixtures, all local-operation callers, and separately named filesystem/security regressions. Full pinned Rust and canonical E2E were chosen rather than relying solely on the targeted run.

Using rootless Podman, private Xvfb/private D-Bus, Rust 1.98.1 / GTK 4.14.5, verified image 670ee0e9b62df8729442d6708bf06f1d968576ffa403f567aef6f597075f3e8c and input hash 5925f771d203e87856087897ef37ecb6b989b9662abf2526d91b3ec31b1b3913:

  • STRATA_CONTAINER_ENGINE=podman ./scripts/quality.sh fmt — passed.
  • STRATA_CONTAINER_ENGINE=podman ./scripts/quality.sh clippy — passed.
  • STRATA_CONTAINER_ENGINE=podman ./scripts/quality.sh test1,732 passed / 18 existing ignored, zero failures, 384.12 s.
  • STRATA_CONTAINER_ENGINE=podman ./scripts/e2e.sh732 passed, 121.03 s.
  • git diff --check, full diff/self-review, test-body hashes, helper-only diff, and compiled inventory mapping — passed.

Exact final inventory collection:

podman run --rm --userns=keep-id --user "$(id -u):$(id -g)" \
  --mount "type=bind,source=$PWD,target=/workspace" --workdir /workspace \
  --env CARGO_HOME=/workspace/target/quality-container/cargo \
  670ee0e9b62df8729442d6708bf06f1d968576ffa403f567aef6f597075f3e8c \
  python3 scripts/test-headless.py adapters::local_operations --locked \
  --target-dir /workspace/target/quality-container/build \
  --config profile.dev.debug=0 --config build.incremental=false -j 2 -- --list

Earlier targeted native command: PATH=/home/l0gicgate/.rustup/toolchains/1.98.1-x86_64-unknown-linux-gnu/bin:/usr/bin:/bin ./scripts/test-headless.py adapters::local_operations -j 2.

No required local gate omitted. The first full Rust run failed solely in the unchanged slow-click UI fixture (1,731 passed / 1 failed / 18 ignored). That failure was diagnosed and fixed separately in #1060/#1063, not skipped or retried unchanged until green. Final validation above includes the merged fix. GitHub CI is pending at publication.

Measurements and residual disposition

CodeScene CLI 1.0.41, final formatted code; CS_ACCESS_TOKEN="$CODE_SCENE_TOKEN" cs review <file> --output-format json for each changed Rust file. These are per-file scores, not a combined suite score. Organization relocates existing case-level findings; no claim that all complexity disappeared or every file improved.

Owner Before After Retained findings / decision
Parent fixtures / manual benchmarks 4.52 8.80 Keep typed terminal wrappers despite structural similarity; preserve the large manual benchmark and its contract.
Copy new owner 10.00 No findings.
Paths new owner 10.00 No findings.
Paste results new owner 10.00 No findings.
Undo new owner 10.00 No findings.
Moves new owner 9.38 Retain success vs non-WouldRecurse failure cases; distinct fallback contracts.
Naming new owner 9.38 Retain non-UTF8, hidden-name, extension, numbered-name, and directory cases; not interchangeable inputs.
Progress new owner 9.52 Preserve the larger between-moves cancellation scenario and its completed/unattempted accounting.
Conflicts new owner 8.03 Keep per-item choices, same-folder noops, keep-both and replace assertions explicit. Further setup/assertion consolidation deferred.
Replacement new owner 8.54 Preserve staging cancellation, substituted-source identity, directory non-merging, and symlink cleanup assertions. Further consolidation deferred.
Existing deletion 10.00 7.32 Adding 15 unchanged cases exposes cohesion/large-assertion findings in this owner. Keep worker, cancellation, error-policy, alias and symlink scenarios together by responsibility; do not split merely to recover the former score.
Existing restore safety 10.00 8.54 Adding 6 unchanged cases exposes duplication/assertion findings. Preserve destination identity, source provenance, volume boundaries, cancellation and payload/metadata retention as separate scenarios.

The existing healthy owners' original code is unchanged; their lower file scores after adding cases are disclosed, not hidden. Retained case-level debt is explicitly deferred from this bounded pass, not suppressed or converted into extra closure requirements. Archive-specific findings and production branching remain outside this unit. Stop condition: merge + Cloud verification of the parent/owners and preserved coverage; do not require every owner to reach 10.

Active overlap: #1061 and #320 add tests to the parent file. Their feature code is not included here; retain their new tests when integrating, guided by the new ownership map. #187 touches the unchanged trash-capabilities owner.

@l0gicgate

Copy link
Copy Markdown
Contributor Author

Full CI https://github.com/lgse/strata/actions/runs/35060079635 passed on a6a5f4a10acc467f7d671788673edf68f471fd6b (first attempt), including every Rust/E2E shard and exact-coverage gate. Local final-code results: 1,732 Rust passed / 18 existing ignored; 732 E2E passed; formatting, Clippy, inventory mapping and byte-preservation checks passed. Ready for owner review/merge. Unit 26 remains unchecked until merge and Cloud verification; residual findings and per-file score decreases remain explicitly documented. No merge performed.

@l0gicgate l0gicgate added the skip-changelog Exclude internal-only changes from generated release notes label Sep 16, 2026
@l0gicgate
l0gicgate merged commit a33885c into main Sep 16, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip-changelog Exclude internal-only changes from generated release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant