Skip to content

feat(python-harness): auto-track dict/set and nested JSON args#130

Draft
mkayander wants to merge 4 commits into
mainfrom
cursor/python-collections-auto-tracking-04a1
Draft

feat(python-harness): auto-track dict/set and nested JSON args#130
mkayander wants to merge 4 commits into
mainfrom
cursor/python-collections-auto-tracking-04a1

Conversation

@mkayander
Copy link
Copy Markdown
Owner

@mkayander mkayander commented Apr 23, 2026

Summary

Python Pyodide harness: tracked collections (list/dict/set/frozenset call), deep-wrapped JSON case args including graph, stricter type errors, expanded dict/set APIs, and docs/PYTHON_PYODIDE.md contract.

Highlights

  • Literals / AST: TrackedList, TrackedDict, TrackedSet, comprehensions; frozenset(expr)TrackedFrozenSet (single positional, no keywords).
  • Args: array/matrix/set/map/object validation + deep wrap; graph now deep-wrapped as nested lists (edge-list JSON); null array → empty TrackedList.
  • Collections: TrackedDictsetdefault, pop, popitem, clear, update; TrackedSetpop, clear; discard/remove use super().__contains__ where needed; TrackedFrozenSet for immutable membership reads.
  • Docs: docs/PYTHON_PYODIDE.md — new “Collection and graph tracking” section + file table row for collection_tracker.py.

Tests

src/packages/dstruct-runner/python/test_exec.py — includes frozenset, graph wrap, graph type error, dict.clear, merged main list-iteration test, etc.

Still not auto-tracked

defaultdict / Counter / arbitrary dict subclasses without literal rewrite (documented).

Open in Web Open in Cursor 

- Add TrackedDict and TrackedSet with callstack frames (map/set arg types)
- Extend AST transformer for {}, set literals, dict/set comprehensions
- Deep-wrap array/matrix/map/object/set arguments from JSON for nested tracking
- Register collection_tracker in Pyodide harness; add unit tests

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dstruct Ready Ready Preview, Comment Apr 23, 2026 10:09pm

Resolve test_exec conflict (keep list iteration test + collection tests).
Review: validate array/matrix/set/map JSON shapes with TypeError; empty
array arg uses TrackedList; map/object reject non-dict; DRY collection
frame helper; add regression tests for bad arg types and null array.

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
…te args

- TrackedSet.add: use super().__contains__ for membership so no readArrayItem
  frame when rejecting duplicates
- _convert_arg_to_python: require each arg to be a dict (explicit TypeError)
- Remove unused os import from exec.py
- Add regression tests for duplicate add and malformed args list

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
…PIs, docs

- Add TrackedFrozenSet and AST rewrite for frozenset(...) calls
- Deep-wrap graph args like arrays; TypeError if value is not a JSON list
- TrackedDict: setdefault, pop, popitem, clear, update with frame semantics
- TrackedSet: pop, clear; discard/remove avoid spurious read via super
- Document harness contracts in docs/PYTHON_PYODIDE.md
- Extend test_exec for frozenset, graph, dict.clear

Co-authored-by: Max Kayander <mkayander@users.noreply.github.com>
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.

2 participants