• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

source-academy / py-slang / 42459101570
88%

Build:
DEFAULT BRANCH: main
Ran 08 Nov 2026 07:51AM UTC
Jobs 1
Files 182
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

08 Nov 2026 07:30AM UTC coverage: 87.953%. Remained the same
42459101570

push

github

web-flow
docs: plan and specification draft for Typed Python §4 (#630)

* docs: plan and specification draft for Typed Python §4

Adds the project plan for Typed Python §4 (docs/typed-python-4.md): Python §4 with type
annotations, checked before the program runs by an embedded browser build of pyright
(browser-basedpyright), with the Source prelude declared in a stub and Source's rules
(strict bool, ** types) in a patched builtins.pyi.

Phase 0 (language design) has started: the rules table is decided except for `Any`, and
docs/specs/python_4_typed.tex is the first draft of the specification, with the grammar of
annotations, type parameters, type aliases and types, and a new section "Static Type Checking".

experiments/pyright-spike/ is the spike behind the plan: the worker host for Node and browsers,
the bundle trimming (18 MB -> 4.7 MB raw, 0.77 MB brotli), the prelude stub, and the test corpus
that checks each rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: link the follow-up issues #631 and #632 from the Typed Python §4 plan and specification

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: Typed Python §4 spec: why the right operand of and/or need not be a bool

Its value is the value of the whole expression, without a further check, so that a function
returning a and f(...) or a or f(...) still gives rise to an iterative process.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Typed Python §4: address the review of #630

* patch-builtins: None is not a condition either. NoneType.__bool__ (in types.pyi, returning
  Literal[False]) now returns None, so `if None:` is an error; source_semantics.py checks it.
* Plan, REPL chunks: check a chunk with explicit imports of every earlier top-level name, since
  `from .chunk_k import *` skips names that start with `_`.
* Plan, CPython parity: CPython 3.13 evaluates annotations when the def runs, so the sicp package
  must define Pair, LList, Stream and Callable (p... (continued)

7209 of 8641 branches covered (83.43%)

Branch coverage included in aggregate %.

14694 of 16262 relevant lines covered (90.36%)

313689.55 hits per line

Jobs
ID Job ID Ran Files Coverage
1 42459101570.1 08 Nov 2026 07:51AM UTC 182
87.95
GitHub Action Run
Source Files on build 42459101570
  • Tree
  • List 182
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #42459101570
  • 5a41024d on github
  • Prev Build on main (#41604827037)
  • Next Build on main (#42461589325)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc