Skip to content

[TS] Track deletion of allocated object properties - #461

Open
CaelmBleidd wants to merge 13 commits into
mainfrom
caelmbleidd/ts-426-delete-property
Open

CaelmBleidd wants to merge 13 commits into
mainfrom
caelmbleidd/ts-426-delete-property

Conversation

@CaelmBleidd

@CaelmBleidd CaelmBleidd commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Current stacked revision

  • Base: 127ecb5df35366c550a32725cf4e6af25208f673. Head: 9ae8975e710240c77127234441291fe11e5717d0. This range contains no merge commits.
  • 12/12 focused DeleteProperty tests, detektTest, and git diff --check passed on this head using JacoDB [TS PBT] Schedule assertion, coverage and hypothesis targets under one budget #399. detektMain passed on the preceding head.
  • The final test-only commit replaces a duplicate Node process runner with the existing shared assertNodeReplay, preserving the TypeScript replay assertions. CI for this exact head is not attached; pinned core correctness and AI code hygiene my-review passes found no actionable defects. Older results below are historical.

Refs #426. Depends on #455.

Scope

  • Track deletion separately from Boolean, Number, and reference field payloads for allocated objects.
  • Read a deleted property as undefined through aliases, and clear the deletion marker on reassignment.
  • Preserve successful deletion of an absent property. Report unsupported operands and input-object receivers explicitly.
  • Report deletion of known Object.prototype names, class prototype methods, and named Array properties as unsupported when a later read can expose a prototype value. Array.length also remains unsupported.
  • Continue supporting deletion of own class fields and object-literal methods.

Verification

  • Twelve focused DeleteProperty tests pass. Ordinary analyzeWithOutcome regressions check both outcomes of a conditional delete, unsupported paths for input receivers and prototype fallbacks, and supported deletion of an own class field and object-literal method.
  • The prototype-method regression fails on the previous head with a false completed state and passes after the fix.
  • Full :usvm-ts:test: 1,113 tests, 143 skipped, 0 failures, 0 errors.
  • :usvm-ts:detektMain and :usvm-ts:detektTest pass with zero reported code smells; git diff --check passes.
  • Node.js 26.5.0 replay of the four new concrete TypeScript cases passes. Earlier replay covered nine other concrete cases, including both conditional branches and deletion of a number field with value 0.
  • CI run 37079459795 passed all six jobs on the previous head 8add94d6. It used workflow_dispatch because the automatic PR trigger only watches base main.
  • The repository pre-commit hook invokes the nonexistent checkLicense Gradle task, so it was bypassed after the manual checks above.

Support boundary

  • Deletion is modeled for allocated concrete object receivers. A symbolic input receiver, array index deletion, and other delete operand forms remain unsupported and require separate work.
  • The prototype guards are conservative. Deleting a named own Array property, an own property shadowing a prototype method, or a property on an object without the default prototype may also report unsupported.
  • Property presence for in is handled in [TS] Evaluate property presence for the object in operator #425.
  • Independent core correctness and AI code hygiene reviews of the previous pinned head 8add94d6 found no actionable defects. This PR is ready for review as a stacked change; merge after [TS] Compare string values in equality operators #455.

Base: 127ecb5df35366c550a32725cf4e6af25208f673 (#455). Head: 9ae8975e710240c77127234441291fe11e5717d0.

@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-426-delete-property branch from ce99964 to 53d10be Compare October 2, 2026 22:31
@CaelmBleidd
CaelmBleidd changed the base branch from main to caelmbleidd/ts-422-string-value-equality October 2, 2026 22:32
Implement supported string equality cases and preserve explicit unsupported outcomes for unbacked symbolic witnesses. Reuse shared Node replay tests.
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-422-string-value-equality branch from 7927e93 to 127ecb5 Compare October 3, 2026 05:21
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-426-delete-property branch from 8add94d to 3a06f16 Compare October 3, 2026 05:28
@CaelmBleidd
CaelmBleidd marked this pull request as ready for review October 3, 2026 06:43
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/ts-422-string-value-equality branch from e5527a3 to 7217c2a Compare October 4, 2026 19:51
Base automatically changed from caelmbleidd/ts-422-string-value-equality to main October 5, 2026 12:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant