Skip to content

Soak journal leak gate fails while listing macOS descriptors #307

Closed

Description

@mdspinali

Required outcome

Run the complete soak driver tests on macOS without weakening the journal descriptor leak check.

Evidence

On clean commit bf0bf7e4dddeae24f4e72530fc5eb546693075ac, make test-conformance fails on macOS 27.0.1 with Go 1.25.1:

TestRunRejectsInvalidInvocationWithoutOpeningJournal
soak_test.go:275: list open descriptors: lstat /dev/fd/3: bad file descriptor

conformance/soak/soak_test.go:298-305 uses os.ReadDir("/dev/fd") to count names.
The counter does not require entry metadata.
conformance/soak/runner.go:95-100 closes each journal writer through defer.
The test must continue to detect a missing close.

Severity: Low. This test helper blocks required macOS source validation.
No production descriptor leak is established by this failure.

Proposed fix

Open /dev/fd and keep its directory handle open during File.Readdirnames(-1).
Close the handle before the helper returns.
Fail on every open or enumeration error and count every name.
Preserve the repeated leak comparison and prior-journal byte assertion.

Acceptance criteria

  • make test-conformance-invariants passes on clean committed source on the Mac and desktop 10.0.0.86.
  • Both full structured gates execute nonzero tests with zero failures and zero skips.
  • A clean isolated mutant that omits journal writer cleanup fails the retained descriptor comparison.
  • Independent review accepts the complete correction and confirms that no assertion or platform requirement was weakened.
  • The wider make test-conformance gate passes on the integrated candidate.

Release relationship

This defect blocks local validation for v0.4.0 and RC.2 preparation in #303.
The failed local log remains at .ignore/release-rc2/dispatch/source-quality-preflight.log.
No CI, publication, or issue closure follows from the proposed correction.

Activity

  1. added this to the v0.4.0 milestone on Oct 4, 2026
  2. mdspinali commented on Oct 4, 2026

    @mdspinali
    ContributorAuthor

    Fixed in d205f479e1afeaa3adc759b0f830fcd98c8ccd9c

    Change

    The descriptor counter keeps its directory open during Readdirnames(-1).
    It reports open, enumeration, and cleanup errors.
    It counts all names without filtering.
    The journal assertions and eight repetitions remain unchanged.
    The implementation also includes cfbcd3b840cfad7552715444680cd114b4023068.

    Validation

    • make ci-source-quality passed on clean d205f479e1afeaa3adc759b0f830fcd98c8ccd9c on the Mac and desktop 10.0.0.86.
    • Both complete runs include make test-conformance and make test-conformance-invariants.
    • Both soak suites passed all 73 tests with zero failures and skipped tests.
    • The original clean invariant gates also passed on cfbcd3b840cfad7552715444680cd114b4023068 on both hosts.
    • make test-conformance-invariants rejected clean mutant fc44db8a0cf54143c9559e300288fb3d16340c98, derived from d205f479e1afeaa3adc759b0f830fcd98c8ccd9c.
    • That mutant removes only the production journal cleanup. The unchanged comparison observed 14 descriptors and expected 7.
    • Independent review accepted the complete source correction and its cleanup error check.
    • The separate simplification review found no justified deletion or abstraction.

    The original macOS failure remains in source-quality-preflight.log.
    The original mutant result remains in soak-descriptor-mutant.log.
    The final mutant result remains in soak-descriptor-mutant-d205f479.log.
    The desktop source-quality attempt with missing release tags remains in desktop-ci-source-quality-f40e7999.log.
    Fetching the published tags corrected that prerequisite failure.
    All logs remain under the owned .ignore/release-rc2/dispatch/ directory.

    These results close this descriptor defect only.
    The complete release and minimum-platform gates remain pending.

  3. mdspinali commented on Oct 11, 2026

    @mdspinali
    ContributorAuthor

    The rollback removed the reviewed descriptor-counter correction from current dev.

    Fresh complete source quality on clean 669829b failed in TestRunRejectsInvalidInvocationWithoutOpeningJournal.
    The helper reported lstat /dev/fd/3: bad file descriptor at conformance/soak/soak_test.go:275.
    The current helper again uses os.ReadDir at line 300.

    The active repair restores the previously reviewed Readdirnames implementation and checked directory close from cfbcd3b8 and d205f479.
    It preserves the prior-journal byte assertion, eight repetitions, complete name count, and descriptor equality requirement.
    The failed full run remains retained as source-quality-attempt3.log in the closeout records.

    Fresh focused gates, the complete source-quality gate, and the required independent review remain pending.
    This issue is reopened because its accepted correction is absent, not because the prior passing evidence changed.

  4. mdspinali commented on Oct 11, 2026

    @mdspinali
    ContributorAuthor

    Fixed in 57ee8a2b36f8025d5e9a48cf22dfd5028fbb4c0e through PR #336.

    Change

    The restored descriptor counter keeps its directory open during Readdirnames enumeration.
    It checks open, enumeration, and close errors.
    It counts every name without filtering.
    The prior-journal byte comparison, eight repetitions, and descriptor equality assertion remain unchanged.

    Validation

    All normal results below ran on clean 812330ce71e2c7ab99c086a5b58ea0126400c321.

    • make test-conformance-invariants passed on the Mac and desktop 10.0.0.86.
    • Each complete structured gate passed 215 named tests, with zero failures or skips.
    • Each soak package passed all 73 tests.
    • Complete make test-conformance passed on both hosts.
    • Complete make ci-source-quality passed on both hosts.
    • Its Mac results contain 2,699 named Go passes, 269 RN tests, and 748 Kotlin tests, with zero failures or skips.
    • Clean isolated mutant 539dd74e44a316454c52e811dff5cc5041219efd removes only production journal cleanup.
    • The unchanged complete invariant gate failed only TestRunRejectsInvalidInvocationWithoutOpeningJournal on that mutant, with zero skips.
    • Its retained descriptor comparison observed 15 descriptors and required 7.
    • Independent review accepted the complete helper correction and all retained assertions.
    • Its separate simplification pass found no justified deletion or abstraction.

    CI run 38172057464 passed all required pull-request checks.
    CI checked e572ca6163be9a6b17a412f2cc0260b86a5f5f5a.
    Its source tree equals local validation source 812330ce and merged dev 57ee8a2b.
    Both source comparisons returned zero.

    The restored FIFO cancellation control also passed in complete conformance validation on both hosts.
    Clean parent-only cancellation mutant 36e8eae1108fdc1d9ef4670f52551b5809389910 failed its unchanged descendant assertion.
    The test reported that the descendant survived cancellation, with zero skips.
    The deliberate mutants remain outside the integration branch.

    The fresh macOS failure remains retained as source-quality-attempt3.log.
    The SDK, desktop Node, Cargo PATH, and missing-tag prerequisite failures remain retained with their original results.
    Mac validation selects its installed SDK through SDKROOT, BINDGEN_EXTRA_CLANG_ARGS, and CFLAGS.
    Desktop validation selects its installed toolchains and the published release tags.
    Later passing runs do not replace those records.
    The complete logs, source identities, mutation results, and independent review remain in the closeout records.

    This closes the restored descriptor-counter defect. It grants no release or dependency exception.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions