Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
710 commits
Select commit Hold shift + click to select a range
0938851
Refactor: Put the other 21 fixtures on the public bootstrap, so gutti…
b-re-w Aug 24, 2026
cbb0696
Fix: Restore publishToGlobals, which shipped as its own tamper stub
b-re-w Aug 24, 2026
0b34f9f
Refactor: Take every library name out of the binder, and let the map …
b-re-w Aug 24, 2026
badec08
Docs: Record how a week of work drifted from its instructions, as che…
b-re-w Aug 24, 2026
67066d6
Refactor: Stop renaming Kotlin namespaces, and merge the two layers o…
b-re-w Aug 24, 2026
8a60d2d
Merge branch 'work/nobrand' into develop
b-re-w Aug 24, 2026
0308cfd
Remove positional upcalls when adapter can serve them
b-re-w Sep 7, 2026
361fb58
Docs: agy needs --dangerously-skip-permissions, and its absence is in…
b-re-w Sep 12, 2026
b57c517
Docs: Check agy's real usage before calling it a quota, and correct t…
b-re-w Sep 13, 2026
9fc5142
Docs: Record two ways a gate lied this week, both caused by the coord…
b-re-w Sep 17, 2026
29f3026
Chore: bring two stray agent files into the repository
b-re-w Sep 21, 2026
0f87aed
Chore: keep worktrees inside the repository
b-re-w Sep 21, 2026
411a4ed
Docs: Keep everything this work creates inside the repository
b-re-w Oct 1, 2026
2f7d3f3
Docs: Propose TypedPython design (static typing, compilation, GPU ker…
b-re-w Oct 1, 2026
226c2d4
Revert: Let the Kotlin-named module keep its positional functions
b-re-w Oct 1, 2026
cd6247f
Feat: Sync release from develop with the main-only layout
b-re-w Oct 1, 2026
cb4115e
Docs: Make TypedPython checking the default and compilation opt-in
b-re-w Oct 1, 2026
4ed9814
Docs: Restructure into intent, spec, agent rules and a bilingual guide
b-re-w Oct 1, 2026
97d6f3f
Fix: Regenerate release from develop on every push instead of keeping it
b-re-w Oct 1, 2026
5773e93
Docs: Free-threading works on 3.14t on desktop, not from 3.15t
b-re-w Oct 1, 2026
599c63e
Merge branch 'work/docs-restructure' into develop
b-re-w Oct 1, 2026
6e54f61
Chore: Fold the wasm experiment into the library and clear the root
b-re-w Oct 1, 2026
c9c1248
Merge branch 'develop' into work/cleanup
b-re-w Oct 1, 2026
d29e17d
Merge branch 'develop' into work/revert-adapter-wins
b-re-w Oct 2, 2026
653d486
Feat: Prove in the wasm suite what only the experiment used to prove
b-re-w Oct 2, 2026
ec8bd09
Feat: Move to Compose Multiplatform 1.11.1
b-re-w Oct 2, 2026
63f020d
Merge branch 'work/compose-1-11' into develop
b-re-w Oct 2, 2026
238119b
Fix: Serve Kotlin-named modules under Kotlin names only
b-re-w Oct 2, 2026
a269c7c
Merge branch 'develop' into work/revert-adapter-wins
b-re-w Oct 2, 2026
bd34a2b
Chore: Refresh the wasm yarn lock after the Compose 1.11 move
b-re-w Oct 2, 2026
d00f413
Test: Follow material3 1.9 Checkbox overloads and let the drag reach …
b-re-w Oct 2, 2026
867f1a9
Docs: Push every commit right away
b-re-w Oct 2, 2026
8f61942
Fix: Let release-sync satisfy the main guard without a PAT
b-re-w Oct 2, 2026
982c311
Docs: Land every feature through an issue and a pull request
b-re-w Oct 2, 2026
ff3bb84
Merge pull request #11 from thisisthepy/work/issue-pr-rule
b-re-w Oct 2, 2026
06436ef
Fix: Let main always fast-forward to the generated release
b-re-w Oct 2, 2026
812c76b
Merge pull request #13 from thisisthepy/work/release-main-parent
b-re-w Oct 2, 2026
724c048
Docs: Close the issue after the develop merge
b-re-w Oct 2, 2026
5db4168
Merge pull request #14 from thisisthepy/work/close-issue-rule
b-re-w Oct 2, 2026
801670a
Feat: Add the TypedPython soundness gate (Any leaks become errors)
b-re-w Oct 2, 2026
62d3332
Build: Package the TypedPython gate as a typedpython wheel
b-re-w Oct 2, 2026
b159a94
Bench: Add the TypedPython benchmark harness (CPython / Node / Java /…
b-re-w Oct 2, 2026
e0f14e4
Feat: Let a library resolve member names on Kotlin proxies
b-re-w Oct 2, 2026
ba4c6f4
Merge pull request #29 from thisisthepy/work/member-resolver
b-re-w Oct 2, 2026
0da916f
Docs: One current design per topic, superseded designs archived, ROAD…
b-re-w Oct 2, 2026
946ec0a
Merge remote-tracking branch 'origin/develop' into work/docs-consolidate
b-re-w Oct 2, 2026
329935a
Merge pull request #30 from thisisthepy/work/docs-consolidate
b-re-w Oct 2, 2026
38b5118
Feat: Report type-changing rebinding and mixed-element containers
b-re-w Oct 2, 2026
71ee70d
Fix: Resolve a package's own imports in the gate
b-re-w Oct 2, 2026
63b1921
Merge branch 'work/typedpython-gate' into work/typedpython-rebind
b-re-w Oct 2, 2026
f8f6663
Fix: Mirror the package tree for the probe pass
b-re-w Oct 2, 2026
9e61d11
Feat: A Compose host entry point that draws a Python-declared root
b-re-w Oct 2, 2026
655479b
Merge remote-tracking branch 'origin/develop' into work/compose-host
b-re-w Oct 2, 2026
a1eccbb
Docs: Subagents do not run heavy local builds
b-re-w Oct 2, 2026
5bd35c4
Merge pull request #40 from thisisthepy/work/subagent-build-rule
b-re-w Oct 2, 2026
077fed8
Fix: Accept directories in typedpython check
b-re-w Oct 2, 2026
e838066
Merge branch 'work/typedpython-gate' into work/typedpython-ir
b-re-w Oct 2, 2026
99a9870
Feat: Typed Kotlin-name stubs, and a CI artifact of them for Compose …
b-re-w Oct 2, 2026
7ed2ed9
Merge remote-tracking branch 'origin/develop' into work/typed-stubs
b-re-w Oct 2, 2026
a85f7eb
Feat: Define the TypedPython typed IR (stage 2 contract)
b-re-w Oct 2, 2026
86012ca
Merge pull request #43 from thisisthepy/work/typed-stubs
b-re-w Oct 2, 2026
e9fe49e
Spec: TypedPython compilation, IR-level safety proof, incremental builds
b-re-w Oct 2, 2026
c2c80fc
Spec: Fix the C runtime API the generated code may call
b-re-w Oct 2, 2026
6492bed
Docs: Record the IR-to-C backend, IR safety proof, incremental builds…
b-re-w Oct 2, 2026
6110e47
Spec: Let compiled code call Kotlin through opaque Python objects
b-re-w Oct 2, 2026
b2f5e20
Merge remote-tracking branch 'origin/develop' into work/compose-host
b-re-w Oct 2, 2026
eb45de8
Merge pull request #48 from thisisthepy/work/compose-host
b-re-w Oct 2, 2026
90c54cd
Feat: Child namespaces, describe-by-name, keyword maps, and material-…
b-re-w Oct 2, 2026
10d8852
Merge remote-tracking branch 'origin/develop' into work/binder-surface-2
b-re-w Oct 2, 2026
a8bb8f1
Fix: Stub paths are case-unique, and Kotlin names that are Python key…
b-re-w Oct 3, 2026
2d32062
Merge remote-tracking branch 'origin/develop' into work/stub-case
b-re-w Oct 3, 2026
8b19a7d
Merge pull request #49 from thisisthepy/work/stub-case
b-re-w Oct 3, 2026
a681e0b
Feat: Feed PythonStubsTask output to toolchain's typedpythonStubs con…
b-re-w Oct 3, 2026
4f99132
Perf: Run Pyrefly once per gate check, probes included
b-re-w Oct 3, 2026
cd9a412
Feat: TypedPython incremental compilation cache (module unit)
b-re-w Oct 3, 2026
cc01d59
Merge remote-tracking branch 'origin/develop' into work/binder-surface-2
b-re-w Oct 3, 2026
d6d3978
Merge pull request #51 from thisisthepy/work/binder-surface-2
b-re-w Oct 3, 2026
ac4525b
Feat: Expose each target's CPython include directory as a Gradle Prov…
b-re-w Oct 3, 2026
4706f11
Merge remote-tracking branch 'origin/develop' into work/include-provider
b-re-w Oct 3, 2026
a017473
Feat: TypedPython IR safety verifier (SPEC N-8)
b-re-w Oct 3, 2026
9d8edcf
Spec: Settle IR ambiguities found by the verifier
b-re-w Oct 3, 2026
3d4e277
Merge pull request #55 from thisisthepy/work/include-provider
b-re-w Oct 3, 2026
7fd5547
Feat: Make compiled a builtin for plain CPython and the gate
b-re-w Oct 3, 2026
66f4fc2
Feat: Expose each target's CPython link library next to its include d…
b-re-w Oct 3, 2026
6536dc2
Merge pull request #58 from thisisthepy/work/libdir
b-re-w Oct 3, 2026
1917324
Feat: TypedPython C runtime (tp_runtime.h) with differential tests ag…
b-re-w Oct 3, 2026
c159115
Feat: TypedPython C back end (IR -> C-API extension) and build driver
b-re-w Oct 3, 2026
8f87972
Feat: TypedPython front end (AST + Pyrefly types -> typed IR)
b-re-w Oct 3, 2026
f0dcb5e
Merge branch 'work/tp-cgen' into work/typedpython-m2
b-re-w Oct 3, 2026
542b1f5
Merge branch 'work/tp-frontend' into work/typedpython-m2
b-re-w Oct 3, 2026
a3c6809
Merge branch 'work/tp-verify' into work/typedpython-m2
b-re-w Oct 3, 2026
59902b5
Merge branch 'work/tp-incremental' into work/typedpython-m2
b-re-w Oct 3, 2026
c30a772
Feat: @compiled is a builtin from the moment the interpreter starts
b-re-w Oct 3, 2026
e40bffb
Merge remote-tracking branch 'origin/develop' into work/builtin-compiled
b-re-w Oct 3, 2026
f2eba65
Merge pull request #62 from thisisthepy/work/builtin-compiled
b-re-w Oct 3, 2026
f6627ec
Merge branch 'work/tp-builtin' into work/typedpython-m2
b-re-w Oct 3, 2026
b4688c8
Merge branch 'work/typedpython-gate-once' into work/typedpython-m2
b-re-w Oct 3, 2026
14ccf6a
Docs: The compile slot needs no separate .py fallback
b-re-w Oct 3, 2026
8f6b87c
Feat: TypedPython pipeline and demo on the IR-to-C back end
b-re-w Oct 3, 2026
957315e
Spec: Proven i64 ops, callee-only redo, entry snapshots of globals
b-re-w Oct 3, 2026
89a31d4
WIP: #38 walker generics and member/extension properties (agent stopp…
b-re-w Oct 3, 2026
0f12c7b
Feat: Publish the embedded CPython version for build tools
b-re-w Oct 3, 2026
68d64a1
Bench: Record the TypedPython baseline (idle machine, load 1.6)
b-re-w Oct 3, 2026
a96c607
Test: State what create() lets the attribute filter see
b-re-w Oct 3, 2026
4130587
Merge pull request #63 from thisisthepy/work/published-version
b-re-w Oct 3, 2026
ac366e9
Fix: Put Function.entry_globals after the fields without defaults
b-re-w Oct 3, 2026
4c26827
Feat: Front end records proven i64 ops, redo calls and entry globals
b-re-w Oct 3, 2026
f34e238
Feat: Verifier re-proves proven ops, redo calls and entry globals
b-re-w Oct 3, 2026
a3f3489
Merge branch 'work/m2-fe' into work/typedpython-m2
b-re-w Oct 3, 2026
8e650c1
Feat: C back end for proven ops, redo calls and entry globals
b-re-w Oct 3, 2026
c945ac3
Merge branch 'work/m2-ve' into work/typedpython-m2
b-re-w Oct 3, 2026
0ffd9a6
Merge branch 'work/m2-cg' into work/typedpython-m2
b-re-w Oct 3, 2026
43638b2
Spec: Record the proven/redo/entry-globals rules the verifier enforce…
b-re-w Oct 3, 2026
f9c4a2d
Test: Pin object functions, object-constant types and extension compo…
b-re-w Oct 3, 2026
4331439
Fix: Bind object functions and type stub constants and composable slo…
b-re-w Oct 3, 2026
e991ead
Fix: Decline receivers with off-classpath supertypes, show reified fu…
b-re-w Oct 3, 2026
a6f0d37
Bench: Run the TypedPython @compiled column through the pipeline
b-re-w Oct 3, 2026
513f10f
Spec: Local fixed-size arrays and tuple returns in the IR (fannkuch, M2)
b-re-w Oct 3, 2026
ad6a745
Test: An internal object's functions are neither bound nor declared (…
b-re-w Oct 3, 2026
c492c07
Fix: Bind object functions only for objects public in Kotlin (#53)
b-re-w Oct 3, 2026
344af50
Merge remote-tracking branch 'origin/develop' into work/walker-proper…
b-re-w Oct 3, 2026
d554c9b
Docs: Mark #38/#54 spec entries implemented after verification
b-re-w Oct 3, 2026
054ed2b
Docs: State the off-classpath receiver decline in SPEC B-1
b-re-w Oct 3, 2026
31c092f
Merge pull request #65 from thisisthepy/work/walker-properties
b-re-w Oct 3, 2026
7a503e4
Merge remote-tracking branch 'origin/develop' into work/stub-types
b-re-w Oct 3, 2026
fc03e83
Feat: Incremental TypedPython builds (pipeline.compile_project, typed…
b-re-w Oct 3, 2026
d163293
CI: Run the TypedPython C tests under ASan+UBSan
b-re-w Oct 3, 2026
3c10a57
Merge branch 'work/m2-inc' into work/typedpython-m2
b-re-w Oct 3, 2026
19cb97e
Merge branch 'work/m2-san' into work/typedpython-m2
b-re-w Oct 3, 2026
eb4dcb8
Feat: Verifier proves local arrays and tuples
b-re-w Oct 3, 2026
9c3ba6e
Docs: Specify the packaged desktop app's bundled stdlib (SPEC L-9, #60)
b-re-w Oct 3, 2026
1946bd4
Test: A packaged desktop app finds its stdlib without PYTHONHOME (#60)
b-re-w Oct 3, 2026
ff0e02b
Feat: Ship the stdlib in the packaged desktop app and point CPython a…
b-re-w Oct 3, 2026
973a470
Docs: Specify object functions and nested object-constant types (SPEC…
b-re-w Oct 3, 2026
fa2558e
Merge pull request #67 from thisisthepy/work/stub-types
b-re-w Oct 3, 2026
ae67e09
Feat: Front end lowers local arrays and tuple returns (fannkuch)
b-re-w Oct 3, 2026
8cb50d5
Merge remote-tracking branch 'origin/develop' into work/desktop-stdlib
b-re-w Oct 3, 2026
64a7744
Feat: Runtime helpers for local arrays and tuples
b-re-w Oct 3, 2026
699c56d
Merge branch 'work/m2-rt2' into work/typedpython-m2
b-re-w Oct 3, 2026
90929db
Merge branch 'work/m2-fe2' into work/typedpython-m2
b-re-w Oct 3, 2026
95d96d4
Feat: C back end for local arrays and tuples
b-re-w Oct 3, 2026
a63c659
Merge branch 'work/m2-ve2' into work/typedpython-m2
b-re-w Oct 3, 2026
0e464af
Merge branch 'work/m2-cg2' into work/typedpython-m2
b-re-w Oct 3, 2026
4449d37
Test: Pin the extension-function receiver decline (#66) and Icons.Def…
b-re-w Oct 3, 2026
979921a
Fix: Decline extension functions whose receiver has a supertype off t…
b-re-w Oct 3, 2026
b8cb969
Fix: Clean the launch test's scratch dir without following its link t…
b-re-w Oct 3, 2026
d75005a
Merge remote-tracking branch 'origin/develop' into work/typedpython-m2
b-re-w Oct 3, 2026
0ef3441
Docs: Every acquired CPython reports the pinned version (SPEC T-5, #47)
b-re-w Oct 3, 2026
f396396
Test: Acquired headers' PY_VERSION equals pythonVersion on every targ…
b-re-w Oct 3, 2026
81380cd
Fix: Ship CPython 3.14.7 on iOS (BeeWare 3.14-b11) and fail the build…
b-re-w Oct 3, 2026
82f6d7c
CI: Plant the ASan self-check fault in the redzone and show the repor…
b-re-w Oct 3, 2026
60dd9db
Docs: An Any slot boxes Python scalars and reads them back (SPEC U-10…
b-re-w Oct 3, 2026
a7cab8a
Test: Scalars round-trip through Any slots; a counter state recompose…
b-re-w Oct 3, 2026
0a91265
Feat: Box Python int/float/bool/str into Kotlin Any slots and unbox o…
b-re-w Oct 3, 2026
9a16536
CI: Let the ASan self-check case reach ASan
b-re-w Oct 3, 2026
4304106
Docs: A stub class lists every Kotlin supertype with a stub class (SP…
b-re-w Oct 3, 2026
6a90ed1
Test: Pin multiple stub bases; a Vertical slot takes Arrangement.Spac…
b-re-w Oct 3, 2026
8882509
Fix: Render every Kotlin supertype that has a stub class as a base (#71)
b-re-w Oct 3, 2026
b1ef413
Merge pull request #64 from thisisthepy/work/typedpython-m2
b-re-w Oct 3, 2026
d143417
Merge pull request #28 from thisisthepy/work/typedpython-bench
b-re-w Oct 3, 2026
b319ce2
Fix: Make every AGP java-resources task depend on generatePythonPrope…
b-re-w Oct 3, 2026
88e05bd
Merge remote-tracking branch 'origin/develop' into work/typedpython-s…
b-re-w Oct 3, 2026
061f199
Docs: Value-class constructors, CharSequence results and constructor …
b-re-w Oct 3, 2026
78eb48a
Test: TextFieldState is creatable, readable as str and drawable from …
b-re-w Oct 3, 2026
ebbcd89
Feat: Bind value-class constructors and CharSequence results; walk Te…
b-re-w Oct 3, 2026
a27c2f5
Merge remote-tracking branch 'origin/develop' into work/desktop-stdlib
b-re-w Oct 3, 2026
5fed022
Merge remote-tracking branch 'origin/develop' into work/ext-fn-receiver
b-re-w Oct 3, 2026
738955a
Docs: Desktop jar packs real libraries and extracts into a cache (SPE…
b-re-w Oct 3, 2026
826de4a
Test: No empty library in the desktop jar; extraction stays out of th…
b-re-w Oct 3, 2026
0e27bb6
Fix: Pack resolved, best-effort stripped libpython and extract into a…
b-re-w Oct 3, 2026
9ee0c81
Merge remote-tracking branch 'origin/develop' into work/ios-3147
b-re-w Oct 3, 2026
1899a42
Merge pull request #75 from thisisthepy/work/android-javares-dep
b-re-w Oct 3, 2026
1dd507a
Merge pull request #76 from thisisthepy/work/desktop-stdlib
b-re-w Oct 3, 2026
b7848d8
Merge remote-tracking branch 'origin/develop' into work/any-slot-scalars
b-re-w Oct 3, 2026
b6fb584
Merge remote-tracking branch 'origin/develop' into work/stub-supertypes
b-re-w Oct 3, 2026
7982303
Merge remote-tracking branch 'origin/develop' into work/textfieldstate
b-re-w Oct 3, 2026
cea47f3
Docs: The desktop library needs nothing beyond java.base (SPEC L-10, …
b-re-w Oct 3, 2026
d3ac546
Test: The proxy type works on a java.base-only runtime (#77)
b-re-w Oct 3, 2026
2910dba
Fix: Build the proxy type without sun.misc.Unsafe so a jlinked app im…
b-re-w Oct 3, 2026
0b95983
Docs: The iOS app bundle carries the stdlib and the payload (SPEC L-1…
b-re-w Oct 3, 2026
cad1458
Test: iOS bundled-home resolution and stdlib staging selection (#59)
b-re-w Oct 3, 2026
e6521da
Feat: Stage the iOS stdlib into the app bundle and set the home befor…
b-re-w Oct 3, 2026
6016901
Chore: Wire the install-python build phase into iosApp and add a bund…
b-re-w Oct 3, 2026
ec65a88
Merge remote-tracking branch 'origin/develop' into work/jar-libpython
b-re-w Oct 3, 2026
8687334
Fix: Keep primitive value-class constructors as functions, mark const…
b-re-w Oct 3, 2026
e42b01b
Test: Staged prefix materialises archive symlinks; a packaged home wi…
b-re-w Oct 3, 2026
f65bb48
Fix: Extract the CPython archive with symlinks materialised and guard…
b-re-w Oct 3, 2026
bbd4cfc
Merge pull request #50 from thisisthepy/work/typedpython-stubs-wire
b-re-w Oct 3, 2026
1c255e1
Merge remote-tracking branch 'origin/develop' into work/packaged-proxies
b-re-w Oct 3, 2026
10e97f0
Merge pull request #79 from thisisthepy/work/packaged-proxies
b-re-w Oct 3, 2026
01dfbc8
Merge remote-tracking branch 'origin/develop' into work/textfieldstate
b-re-w Oct 3, 2026
368d40a
Merge pull request #80 from thisisthepy/work/ext-fn-receiver
b-re-w Oct 3, 2026
0aa945b
Merge pull request #81 from thisisthepy/work/any-slot-scalars
b-re-w Oct 3, 2026
81c347a
Merge pull request #83 from thisisthepy/work/ios-3147
b-re-w Oct 3, 2026
274a374
Merge pull request #84 from thisisthepy/work/textfieldstate
b-re-w Oct 3, 2026
a27e98c
Merge remote-tracking branch 'origin/develop' into work/stub-supertypes
b-re-w Oct 3, 2026
26485a0
Merge pull request #82 from thisisthepy/work/stub-supertypes
b-re-w Oct 3, 2026
a0ccd22
Merge remote-tracking branch 'origin/develop' into work/jar-libpython
b-re-w Oct 3, 2026
f0d21d7
Test: Render up to four frames after a Python write to a remembered T…
b-re-w Oct 3, 2026
fd059ba
Merge pull request #85 from thisisthepy/work/jar-libpython
b-re-w Oct 3, 2026
a502861
Merge pull request #88 from thisisthepy/work/textfield-frame
b-re-w Oct 3, 2026
b20fd58
Merge origin/develop into work/ios-bundle
b-re-w Oct 3, 2026
fea0466
Docs: Desktop archives are install_only_stripped; no linux libpython …
b-re-w Oct 3, 2026
6aa985e
Test: Fail on .debug_info in the desktop jar's linux libpython (#86)
b-re-w Oct 3, 2026
f88ddd7
Fix: Acquire python-build-standalone install_only_stripped archives (…
b-re-w Oct 3, 2026
a910655
Merge pull request #89 from thisisthepy/work/ios-bundle
b-re-w Oct 3, 2026
bc92af3
Spec: Fixed-layout classes for TypedPython (N-11, M2b)
b-re-w Oct 3, 2026
e01f35d
Docs: A name that is both a function and a companion module is a call…
b-re-w Oct 3, 2026
19eb00c
Test: TextRange(2) and TextRange.Zero both work, in the binder and th…
b-re-w Oct 3, 2026
d97bbf2
Fix: Make a companion module callable when a factory shares its name …
b-re-w Oct 3, 2026
9d534bb
Bench: Interleaved A/B measurement of CPython vs TypedPython @compiled
b-re-w Oct 3, 2026
4634d51
Bench: Official interleaved A/B result for M2 (2026-10-03 18:46)
b-re-w Oct 3, 2026
2d7ae6a
Merge pull request #91 from thisisthepy/work/m2b-classes-spec
b-re-w Oct 3, 2026
d29f678
Merge pull request #92 from thisisthepy/work/bench-interleaved
b-re-w Oct 3, 2026
d7af7de
Merge remote-tracking branch 'origin/develop' into work/companion-fac…
b-re-w Oct 3, 2026
34b6e62
Merge pull request #93 from thisisthepy/work/stripped-pbs
b-re-w Oct 3, 2026
8e94388
Chore: Remove the CLAUDE.md pointer; AGENTS.md is read directly (#96)
b-re-w Oct 3, 2026
10a1153
Merge pull request #97 from thisisthepy/work/drop-claude-md
b-re-w Oct 3, 2026
90f8dba
Docs: Branches are feat/<topic>; only main, develop and release stand…
b-re-w Oct 3, 2026
a29e5cd
Merge pull request #100 from thisisthepy/feat/branch-naming
b-re-w Oct 3, 2026
a04cede
Feat: Compile recursion with CPython's RecursionError (#57)
b-re-w Oct 3, 2026
0db1b42
Test: Compiled TypedPython calls Kotlin through the binder in the emb…
b-re-w Oct 3, 2026
514a2fa
Merge pull request #101 from thisisthepy/work/m2b-rec
b-re-w Oct 3, 2026
0377c3a
Docs: A KSP result of a proxied Kotlin class is that class's proxy (S…
b-re-w Oct 3, 2026
ddbd09e
Test: KSP functions and methods returning a class give its proxy (#94)
b-re-w Oct 3, 2026
4fa8cef
Fix: _pm_own wraps a result in its rendered class proxy (#94)
b-re-w Oct 3, 2026
7e7241c
Merge pull request #104 from thisisthepy/work/companion-factory
b-re-w Oct 3, 2026
e3d8219
Merge pull request #102 from thisisthepy/work/m2b-45
b-re-w Oct 3, 2026
39c8991
Chore: Keep the wasm npm lock at gradle/wasm-yarn.lock instead of a r…
b-re-w Oct 3, 2026
829ca11
Docs: SPEC U-11 implemented (#94)
b-re-w Oct 3, 2026
65b047e
Merge pull request #111 from thisisthepy/feat/ksp-class-proxy
b-re-w Oct 3, 2026
b248b02
Merge pull request #114 from thisisthepy/feat/wasm-lock-location
b-re-w Oct 3, 2026
bc80753
Docs: No new top-level folders without the maintainer's approval (#115)
b-re-w Oct 3, 2026
5a0c1ac
Merge pull request #116 from thisisthepy/feat/root-dir-rule
b-re-w Oct 3, 2026
a61a713
Test: 10,000 PyObject-argument upcalls then GC leave refcounts unchan…
b-re-w Oct 3, 2026
7f6e2a7
Fix: GeneratedTableTest wrapped fabricated addresses (0xAAAA) in owni…
b-re-w Oct 3, 2026
c432a99
Merge remote-tracking branch 'origin/develop' into feat/binder-double…
b-re-w Oct 3, 2026
e1dc7f5
Merge pull request #118 from thisisthepy/feat/binder-double-free
b-re-w Oct 3, 2026
152f53e
Test: Always run the TypedPython leak test now that #98 is fixed
b-re-w Oct 3, 2026
b0d93ea
CI: Run the TypedPython app fixture and fail when its tests skip
b-re-w Oct 3, 2026
2eeec3e
Merge branch 'feat/tp-leak-test' into feat/tp-app-ci
b-re-w Oct 3, 2026
d8c405d
Chore: Protect main by settings only; drop main-source-guard (#121)
b-re-w Oct 3, 2026
c65d6e0
Merge pull request #122 from thisisthepy/feat/drop-main-guard
b-re-w Oct 3, 2026
a6dbd7f
Merge pull request #119 from thisisthepy/feat/tp-leak-test
b-re-w Oct 3, 2026
0ff7a07
Merge pull request #120 from thisisthepy/feat/tp-app-ci
b-re-w Oct 3, 2026
d822422
Chore: Remove protect-main.sh; main protection is the maintainer's se…
b-re-w Oct 3, 2026
d9d472b
Merge pull request #127 from thisisthepy/feat/drop-protect-main
b-re-w Oct 3, 2026
f66d4ce
CI: Cancel superseded runs per workflow and ref (#129)
b-re-w Oct 3, 2026
e888e7f
Merge pull request #130 from thisisthepy/feat/ci-concurrency
b-re-w Oct 3, 2026
00141fa
Release: sync from e888e7f54d3133965b2f5e33788bd73be03d8249 e888e7f
github-actions[bot] Oct 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"permissions": {}
}
40 changes: 40 additions & 0 deletions .github/workflows/android-native.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Android Native CI

on:
push:
branches: [ "develop", "main" ]
pull_request:
branches: [ "develop", "main" ]

concurrency:
# A newer push to the same ref supersedes this run; frees the shared macOS runners.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
compile:
name: Compile Android Native
# ubuntu-latest is sufficient and faster for cross-compiling to Android Native
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'zulu'
cache: 'gradle'

- name: Cache Konan
uses: actions/cache@v4
with:
path: ~/.konan
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-konan-

- name: Compile Android Native Arm64
# Compile Android Native which includes commonMain + nativeMain + artMain
run: ./gradlew :python-multiplatform:compileKotlinAndroidNativeArm64 --console=plain
46 changes: 46 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Desktop CI

on:
push:
branches: [ "develop", "main" ]
pull_request:
branches: [ "develop", "main" ]

concurrency:
# A newer push to the same ref supersedes this run; frees the shared macOS runners.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: Desktop Tests
# macOS runner is used to compile for iOS and is also good for Desktop.
# We use ubuntu, macos, and windows to cover the major desktop platforms.
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-latest]
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'zulu'
# This automatically caches ~/.gradle/caches and ~/.gradle/wrapper
cache: 'gradle'

- name: Cache Konan
uses: actions/cache@v4
with:
# Cache Kotlin Native compiler and dependencies
path: ~/.konan
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-konan-

- name: Run Desktop Tests
# Using --console=plain so logs are readable in GitHub Actions
run: ./gradlew :python-multiplatform:desktopTest --console=plain
40 changes: 40 additions & 0 deletions .github/workflows/ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: iOS CI

on:
push:
branches: [ "develop", "main" ]
pull_request:
branches: [ "develop", "main" ]

concurrency:
# A newer push to the same ref supersedes this run; frees the shared macOS runners.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
compile:
name: Compile iOS Simulator Arm64
# macos-latest is required since iOS compilation needs Xcode
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'zulu'
cache: 'gradle'

- name: Cache Konan
uses: actions/cache@v4
with:
path: ~/.konan
key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-konan-

- name: Compile iOS Simulator Arm64
# Compile iOS Simulator which includes commonMain + nativeMain + iosMain
run: ./gradlew :python-multiplatform:compileKotlinIosSimulatorArm64 --console=plain
30 changes: 30 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Pages

on:
push:
branches: [main]
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages
cancel-in-progress: false

jobs:
deploy:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v4
- uses: actions/configure-pages@v5
- uses: actions/upload-pages-artifact@v3
with:
path: docs/guide
- id: deployment
uses: actions/deploy-pages@v4
52 changes: 52 additions & 0 deletions .github/workflows/release-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Release sync

# `release` is generated here, not maintained: every push to develop rebuilds it
# as one commit on top of that develop commit (develop minus the Markdown files
# that must not reach main), force-pushes it, and keeps one release -> main PR open.
on:
push:
branches: [develop]

permissions:
contents: write
pull-requests: write

concurrency:
group: release-sync
cancel-in-progress: false

jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Sync release branch
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
# Not used as a base (release is regenerated); the script reads the
# remote sha itself for --force-with-lease.
bash tools/release/sync-release.sh --source "${GITHUB_SHA}" --push

- name: Open or update PR release -> main
env:
# Needs "Allow GitHub Actions to create and approve pull requests" in the
# repository's Actions settings. RELEASE_PR_TOKEN is optional.
GH_TOKEN: ${{ secrets.RELEASE_PR_TOKEN || github.token }}
run: |
set -eu
if ! git rev-parse -q --verify refs/heads/release >/dev/null; then exit 0; fi
if [ "$(git rev-parse release^{tree})" = "$(git rev-parse origin/main^{tree} 2>/dev/null || true)" ]; then
echo "release already equals main; nothing to PR"; exit 0
fi
title="Release: merge release into main"
body="Automated sync of \`develop\` (${GITHUB_SHA::7}) into \`release\`. Markdown outside README.md and docs/ subfolders is removed by tools/release/sync-release.sh."
existing="$(gh pr list --head release --base main --state open --json number --jq '.[0].number // empty')"
if [ -n "$existing" ]; then
gh pr edit "$existing" --title "$title" --body "$body"
else
gh pr create --head release --base main --title "$title" --body "$body"
fi
149 changes: 149 additions & 0 deletions .github/workflows/stubs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: Kotlin-name stubs

# Issue #32: pythonx-compose consumes the binder's Kotlin-name `.pyi` stubs for the real Compose jars
# but cannot run this repository's Gradle build. This job runs the stub task over the Compose version the
# build resolves (`compose-plugin` in gradle/libs.versions.toml) and publishes the result.
#
# - every push to develop and every pull request: the stubs are generated, type-checked against
# tools/stubs/consumer.py with mypy (issue #31), and uploaded as the workflow artifact `kotlin-stubs`;
# - every `v*` tag: the same stubs are also attached to the tag's GitHub release as `kotlin-stubs.zip`.

on:
push:
branches: [ "develop" ]
tags: [ "v*" ]
pull_request:
branches: [ "develop" ]
paths:
- "python-multiplatform-gradle-plugin/**"
- "ksp-fixtures/compose/**"
- "tools/stubs/**"
- "gradle/libs.versions.toml"
- ".github/workflows/stubs.yml"
workflow_dispatch:

permissions:
contents: read

concurrency:
group: stubs-${{ github.ref }}
cancel-in-progress: true

jobs:
stubs:
name: Generate stubs
runs-on: ubuntu-latest
permissions:
contents: write # attaching the stubs to a tag's release
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'zulu'
cache: 'gradle'

- name: Setup Python (for mypy)
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Generate the stubs over the Compose jars
run: ./gradlew :ksp-fixtures:compose:generatePythonStubs --console=plain

- name: Type-check a consumer against them (mypy)
run: tools/stubs/check-stubs.sh ksp-fixtures/compose/build/generated/pythonStubs/desktopMain

- name: Assemble the artifact
run: |
set -euo pipefail
compose_version="$(sed -nE 's/^compose-plugin = "([^"]+)".*/\1/p' gradle/libs.versions.toml)"
test -n "$compose_version"
out=build/kotlin-stubs
rm -rf "$out"
mkdir -p "$out"
cp -R ksp-fixtures/compose/build/generated/pythonStubs/desktopMain/. "$out/"
cat > "$out/README.md" <<README
# Kotlin-name stubs for Compose ${compose_version}

\`.pyi\` stubs for the Kotlin declarations the python-multiplatform binder serves, under the
**Kotlin** module paths and Kotlin names (\`androidx.compose.material3.Checkbox\`, parameters by
their Kotlin names). Nothing here is renamed or Pythonic; that is pythonx-compose's layer.

| | |
|---|---|
| Compose | ${compose_version} (desktop jars) |
| python-multiplatform commit | ${GITHUB_SHA} |
| ref | ${GITHUB_REF} |
| workflow run | ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} |
| generator | \`:ksp-fixtures:compose:generatePythonStubs\` |

Packages stubbed: the \`artifactIncludePackages\` of \`ksp-fixtures/compose/build.gradle.kts\` at
that commit.

Use: put this directory on the type checker's path (\`MYPYPATH=<this directory>\`, or the
IDE's "stub path" / interpreter paths). It is checked with mypy against
\`tools/stubs/consumer.py\` in the commit above.
README
(cd build && zip -qr kotlin-stubs.zip kotlin-stubs)

- name: Upload the stubs
uses: actions/upload-artifact@v4
with:
name: kotlin-stubs
path: build/kotlin-stubs
if-no-files-found: error

- name: Attach the stubs to the tag's release
if: startsWith(github.ref, 'refs/tags/')
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1 \
|| gh release create "$GITHUB_REF_NAME" --title "$GITHUB_REF_NAME" --notes "Kotlin-name stubs for the Compose version this tag builds against."
gh release upload "$GITHUB_REF_NAME" build/kotlin-stubs.zip --clobber

# Issue #44: the stub layout is case-unique, so the stubs generate, extract and type-check on a
# case-insensitive filesystem too (`graphics.Shadow` the class and `graphics.shadow` the package).
stubs-macos:
name: Generate stubs (macOS, case-insensitive)
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'zulu'
cache: 'gradle'

- name: Setup Python (for mypy)
uses: actions/setup-python@v5
with:
python-version: '3.13'

- name: Generate the stubs over the Compose jars
run: ./gradlew :ksp-fixtures:compose:generatePythonStubs --console=plain

- name: No two stub paths are equal under case folding
run: |
python3 - ksp-fixtures/compose/build/generated/pythonStubs/desktopMain <<'PY'
import os, sys
seen = {}
for root, dirs, files in os.walk(sys.argv[1]):
for name in dirs + files:
rel = os.path.relpath(os.path.join(root, name), sys.argv[1])
seen.setdefault(rel.casefold(), []).append(rel)
clashes = [v for v in seen.values() if len(v) > 1]
print("clashes:", clashes)
sys.exit(1 if clashes else 0)
PY

- name: Type-check a consumer against them (mypy)
run: tools/stubs/check-stubs.sh ksp-fixtures/compose/build/generated/pythonStubs/desktopMain
Loading