Live view of the public ticket board (devdocs/progress/ in the pxx repo), refreshed with each content pull. Ticket names link to the underlying ticket. Sections fold; the long archival ones start closed.

Progress board

Generated by tools/progress.sh board-md — regenerate after any board change; tools/progress.sh check fails if this file is stale. History lives in git, not in a timestamp.

urgent (0)

none

working (0)

none

unfinished (10)

Ticket Track Prio Type Summary Blocked-by
bug-nilpy-closure-over-a-loop-variable-captures-by-value N 45 bug NilPy: a closure created in a loop captures the loop variable's VALUE at creation, so [f() for f in fs] gives [0, 1, 2] where CPython gives [2, 2, 2] — Python closes over the variable, not the value
bug-nilpy-list-sort-rejects-key-and-reverse-with-a-bare-parse-error N 50 bug xs.sort(key=..., reverse=...) fails with a bare "unexpected token"
bug-nilpy-non-constant-parameter-defaults-silently-become-none N 70 bug NESTED-DEF defaults only, as of 2026-08-05. def inner(b=q) inside another def still becomes None on the direct-call path; the closure-VALUE path evaluates it. Module-level (e53fa4a3f), METHOD (a87e8a224) and init (e1e43a5e6) halves are all DONE — do not re-derive them from the older sections below.
bug-nilpy-shared-nonlocal-frame-cell-is-never-freed N 40 bug A nonlocal capture's shared frame cell (pycell_new) is never freed — ~23 B per escaping closure, the only closure shape still leaking now that the bound-fn object is refcounted
feature-a-typeref-migrate-consumers A 40 feature TypeRef: migrate consumers lane by lane
feature-nilpy-object-reclamation A 55 feature NilPy object reclamation — dict/list/instance/bound-method lifetime
feature-nilpy-optional-string-param-accepts-none N 50 feature nilpy: passing None to an Optional[str] / str|None PARAMETER does not match the overload
feature-nilpy-star-args-kwargs N 50 feature nilpy: *args / **kwargs in a def signature
feature-nilpy-text-string-kind N 55 feature Phase 2 of multi-type strings: stamp TextString/ByteString kinds and make NilPy str count CHARACTERS — len, indexing, slicing, find and reverse — over the shared byte substrate, with the ASCII flag keeping the common case O(1) feature-a-managed-block-kind-word
feature-pascal-corpus-generics P 55 feature rtl-generics (Generics.Collections) — rung 3 of the Pascal OOP corpus

blocked (6)

Ticket Track Prio Type Summary Blocked-by
bug-nilpy-dunders-not-dispatched-through-containers N 45 bug NilPy: repr/str of a class instance held in a container silently print EMPTY; ordering/sorted raise — no runtime dunder dispatch on a Variant decide-nilpy-runtime-dunder-dispatch-strategy
bug-nilpy-eq-dunder-skipped-when-either-operand-is-a-variant N 55 bug a == b skips eq and compares identity as soon as ONE operand is a variant (a container element, a for-in variable). Both-static works, so the dunder LOOKS wired up; a == xs[0] is silently False. decide-nilpy-runtime-dunder-dispatch-strategy
bug-nilpy-in-over-objects-ignores-eq N 50 bug obj in [list of objects] ignores __eq__ and compares identity
compat-pascal-write-fixed-huge-magnitude-differs-from-fpc A 40 compat write(v:w:d) with |v| >= 2^63, or a NaN/Inf, still prints debris on x86-64 (9223372036854775809.00000) and diverges from FPC on i386/arm32/riscv32 (full 301-digit expansion vs FPC's exponent form) decide-float-fixed-output-exact-or-fpc-17-digit-cap
feature-lib-tkinter-callable-options-with-args B 40 feature tkinter façade: a callable option that receives Tk's OWN arguments feature-nilpy-multi-arg-callback-bridges
feature-opt-store-reload-elimination O 60 feature Store-reload (redundant load) elimination — -O1 pass feature-opt-accumulator-value-tracker

backlog (197)

Ticket Track Prio Type Summary Blocked-by
bug-a-riscv32-and-xtensa-have-no-atomic-codegen S 45 bug riscv32 (and xtensa) reject every _pxxatomic* op — 'unsupported node in IR codegen: atomic' — so any unit touching an atomic cannot be compiled for them at all, on the two targets whose OS gives real concurrent tasks
bug-a-write-fixed-fraction-digits-past-16-are-invented A 35 bug SILENT: write(v:w:d) gets the INTEGER part exactly now, but the fraction is still scaled through a Double — 1/3 at :0:30 prints ...333312 where the double's exact tail is ...333314829616256247, so digits 17-18 are wrong and 19+ are zeros presented as digits
bug-b-crtl-esp-close-cannot-dispatch-socket-vs-file S 30 bug On ESP-IDF, close() cannot serve both file and socket fds — PalClose is fclose(ptr), PalSocketClose is lwip_close. crtl now has one close() (the file one), so socket close is wrong there
bug-b-futex-helpers-are-trapped-behind-pxxclone B 35 bug PalFutexWait/Wake live in palthread next to __pxxclone, so any unit wanting a blocking lock inherits the --threadsafe compile gate; that forced syncobjs' TCriticalSection to be a spinlock and palatomic to be a separate unit
bug-c-header-with-a-body-compiles-twice-across-the-macro-reset C 35 bug A crtl header that carries a BODY (stdarg.h's static _pxx_va* helpers) is compiled twice — its include guard is invisible to the late crtl pull because a THIRD CPreprocess invocation in between clears the macro table
bug-c-static-functions-in-different-crtl-modules-collide C 50 bug static functions with the same name in two crtl .c files (or a static in a header) share one unit identity, so the duplicate-definition warning false-fires — legal C flagged as a redefinition. Blocks promoting that warning to an error
bug-nilpy-augmented-subscript-evaluates-its-index-twice N 30 bug NilPy: d[key()] += 1 calls key() TWICE — the augmented-subscript desugar re-evaluates the base and index. CPython evaluates each once. The stored value is correct; only a side-effecting index is observable.
bug-nilpy-container-membership-ignores-the-eq-dunder N 35 bug x in [a, b] compares boxed handles, so a class's eq is ignored and membership is False for an equal-but-distinct object — the same runtime-dispatch gap as list.sort() ignoring lt
bug-nilpy-def-returning-a-precreated-global-has-no-return-type N 35 bug rd().field does not PARSE when rd() returns a module global that was pre-created because a def above reads it — 'unexpected token'. Binding the call result to a name first works, so only the direct selector-off-call-result form fails
bug-nilpy-del-on-a-plain-variable-silently-does-nothing N 30 bug NilPy: del x on a plain variable is accepted and does nothing — the name stays bound, so reading it afterwards returns the old value where CPython raises NameError. del lst[i] and del d[k] are correct.
bug-nilpy-dynamic-receiver-callable-field-casts-to-the-wrong-class N 40 bug SILENT->CRASH: with two classes declaring the same field name, a call through a dynamically-typed receiver hard-casts to whichever class the scan found FIRST — the field offset is read from the wrong layout, no diagnostic
bug-nilpy-encode-ignores-the-codec N 30 bug NilPy: str.encode / bytes.decode ignore the codec argument
bug-nilpy-list-of-custom-objects-loses-repr-str N 40 bug A user class instance boxed in a list/dict prints as empty, losing __repr__/__str__
bug-nilpy-list-sort-ignores-lt-dunder-on-objects N 35 bug list.sort() on user objects with __lt__ raises a runtime TypeError instead of using it
bug-nilpy-list-sort-method-missing N 35 bug list.sort(key=...) (the in-place METHOD) is missing — sorted() works fine
bug-nilpy-module-global-rebound-scalar-then-class-loses-dispatch N 45 bug NilPy: operator dunders NEVER dispatch on a VARIANT operand holding a user class — dispatch is compile-time only. Scalar-then-class rebinding is just one way to get a variant. feature-nilpy-runtime-dunder-dispatch-on-variants
bug-nilpy-multiple-inheritance-does-not-parse N 40 bug class D(B, C): does not parse — a second base is an 'unexpected token' at the comma, so multiple inheritance and every mixin idiom is unavailable
bug-nilpy-non-ascii-string-surface-measured N 35→40 bug The measured non-ASCII surface: len, upper, chr, ord all diverge
bug-nilpy-plain-class-callable-field-unreachable-through-a-dynamic-receiver N 35 bug A plain class's Callable field records no signature, so def run(o): o.native(x) on a dynamically-typed receiver is a COMPILE ERROR ("no class declares a method or callable field") — only a @dataclass field is reachable that way
bug-nilpy-pyeval-fallback-still-binds-host-kwargs-by-position N 45 bug The pyeval fallback still binds a host method's kwargs by POSITION
bug-nilpy-reversed-list-repeat-returned-from-a-def-infers-int N 30 bug SILENT WRONG VALUE: def f(u): return u * [7] returns the list HANDLE as an integer — the reversed LIST repeat is built correctly but the def's inferred return type is Integer. u * bytes(...) and [7] * u are both fine.
bug-nilpy-same-kind-undefined-operators-still-compute N 60 bug Same-kind undefined operators still compute silently ("ab" - "ab" → 0) decide-nilpy-set-as-a-distinct-type-or-a-list
bug-nilpy-set-is-a-list-not-a-set N 55 bug set() returns a TPyList: elements are NOT deduplicated and it prints with list syntax, so set([1,2,2,3]) gives [1, 2, 2, 3] instead of {1, 2, 3} — silently wrong decide-nilpy-set-as-a-distinct-type-or-a-list
bug-nilpy-uforth-dot-paren-prints-nothing N 40 bug ROOT CAUSE FOUND: .( prints nothing because NilPy strings are BYTE strings — uforth slices a str by a byte offset and the em-dashes in .UFO sources push it past the end. Not a new bug: it is the known, deliberate model (bug-nilpy-non-ascii-string-surface-measured). 8/11 of the suite is identical. bug-nilpy-non-ascii-string-surface-measured
bug-nilpy-unsupported-protocols-repr-iter-getattr-delitem-hash N 35 bug NilPy survey: repr(), iter/next, getattr, delitem and a custom hash are unsupported — all fail LOUDLY (compile error or raise), measured vs CPython
bug-p-uses-order-does-not-decide-which-unit-wins P 60 bug Two units exporting the same routine: FPC takes the LAST in the uses clause, pxx takes the first. The naive fix (last declaring scope wins in FindProc) was measured to break the NilPy stdlib and the compiler's own self-compile — FindProc's return value is an overload-set REPRESENTATIVE that other code reads types off
bug-t-a-self-healed-red-leaves-a-permanent-prio-70-stub-at-the-head-of-the-queue T 60 bug twatch files a prio-70 stub on NEW-RED but never closes or annotates it when a later report moves the same job to FIXED, so a self-healing red outranks all real work indefinitely.
bug-t-bench-slowdowns-are-quantized-by-cpu-p-state T 55 bug The bench series' slow rows on xeon/plexus are not a contention continuum — they are QUANTIZED at 1.238x, the E5-2620 v2's 2.6/2.1 GHz boost-to-base ratio, which makes a void row detectable from the number alone
bug-t-check-does-not-notice-a-status-line-that-contradicts-the-folder T 40 bug A ticket's - **Status:** working body line drifts from the folder that actually holds it, and progress.sh check --strict says nothing. Twenty tickets had claimed working while working/ was empty — nine of them in backlog/unfinished, where it falsely signals a live lock.
bug-t-empty-range-regression-cannot-be-bisected T 55 bug When a run's parent_tested IS the tested sha, the regression's range is empty and idle bisect can never narrow it — so those tickets sit until a human bisects by hand
bug-t-gate-quick-fixedpoint-goes-red-on-any-builtin-addition T 55 bug tools/gate.sh's fixedpoint seeds from PINNED and demands A==B==C, so it goes RED for every agent after any new builtin lands and stays red until re-pin — indistinguishable from the agent's own breakage
bug-t-gate-sh-fixedpoint-does-not-iterate T 60 bug gate.sh's inline fixedpoint() demands convergence in ONE pass from pinned, so it reports RED for every change that alters the compiler's own emitted code — the exact mistake the Makefile documents as wrong
bug-t-pydiff-cpython-arm-fails-on-a-relative-path T 45 bug pydiff.py reports a bogus DIFF for any file given as a relative path: run_cpython passes the full relative path while setting cwd to that path's dirname, so CPython exits 2 and every line reads 'cpython: <no line>'
bug-t-three-network-tests-flake-and-cost-real-debugging-time T 45 bug lib_net_v6only, lib_sockets and lib_platform_esp each pass or fail run-to-run with the SAME compiler, so a gate.sh lib RED and two cross-sweep A/B deltas in one night were all noise that had to be disproved by hand
bug-t-tstate-launders-skip-into-pass T 50 bug tstate records a SKIPPED job as "pass", so a green published state cannot be distinguished from one that actually ran — cross-host coverage differences are invisible exactly when they matter
chore-makefile-testtmp-parameterize A 45 chore Makefile: parameterize hardcoded /tmp test paths ($(TESTTMP)) — concurrent gates corrupt each other
chore-web-secrets-sops-age A 45 chore Website secrets: SOPS + age, encrypted-in-git, paper-backed key feature-web-track-w-bootstrap
compat-pascal-binop-operand-eval-order A 15 compat pxx evaluates binary-operator operands left-to-right; FPC evaluates right-to-left
compat-pascal-calling-convention-directives-uneven P 35 compat stdcall/safecall/pascal/mwpascal are accepted on a class METHOD declaration but are a parse ERROR on a plain routine, an external, or a procedural type — so FPC sources that spell a convention on a routine do not compile, and which spelling works depends on where it is written.
compat-pascal-class-helpers P 25 compat pxx rejects FPC's class helper for T at parse time — TFooHelper = class helper for TFoo is error: unexpected token
compat-pascal-directive-in-comment-ignores-nested-comments-off P 25 compat With nested comments OFF (delphi mode), a {$...} sequence inside a brace comment does not end the comment in pxx, but does in FPC. Lax direction — pxx accepts sources FPC rejects
compat-pascal-index-a-function-call-result P 40 compat Indexing a function call's result — Copy(s,2,3)[1], Make[0], b.ArrP(3)[0] — either fails to parse or reaches IR lowering as an un-lowerable AN_CALL; FPC accepts all three
compat-pascal-inline-generic-specialization P 35 compat pxx accepts only the declaration form specialize Max<Integer> as MaxInt; — FPC's inline specialize Max<Integer>(a, b) in an expression or statement is rejected with 'undefined variable'
compat-pascal-method-impl-without-declaration P 20 compat TC.Foo implementation for a method the class never DECLARED compiles (FPC rejects)
compat-pascal-supports-three-arg-out-form P 30 compat Supports(obj, IFoo) works but FPC's three-argument Supports(obj, IFoo, out Ref) — the form that both tests AND retrieves the interface — is a parse error
compat-pascal-thread-api-surface-differs-from-fpc B 35 compat Threaded FPC code does not compile as-is: TThread lives in palthreadobj rather than Classes, there is no cthreads shim, WaitFor is a procedure where FPC's returns LongWord, and BeginThread/TThreadID do not exist
compat-pascal-unit-deprecated-hint-directive P 25 compat unit X deprecated 'msg'; — a unit hint directive is a parse error
decide-nilpy-parallel-capture-semantics A 5 decide DECIDE: NilPy parallel for-in capture model — what's private, what's shared, how reductions read
docs-canonical-domain D 45 docs Canonical domain in the docs
docs-devnotes-ai-assisted-build D 50 docs Developer notes: how this was actually built (AI-assisted, and honest about it)
feature-a-abi-oracle A 60 feature ABI oracle: backends consult it, and stop reading Syms[]
feature-a-declaration-phase A 55 feature A real declaration phase: all decls before any body is typed
feature-a-promoint-variant-esp-targets S 40 feature Promotable int in a Variant: riscv32 / xtensa
feature-a-shrink-managed-header-on-32-bit A 25 feature On ILP32 the managed-block header wastes 12 of its 24 bytes: three 8-byte slots each carrying a 4-byte value. Packing to 4-byte slots halves it — and the DEADLINE is phase 2, because it caps the meta word at 32 usable bits
feature-a-why-threadsafe-needs-45pct-more-global-fixups A 35 feature --threadsafe self-compile emits 45% more global fixups than the normal one (65657 vs 45326). Raising the cap unblocked it; nobody has explained the +45%, and it may be one fixup per TLS access that dedupes away
feature-b-crtl-last-seven-unimplemented-declarations B 40 feature The crtl declarations still without bodies — now 2: atexit and poll (chmod, umask, msync, mremap and ioctl landed 2026-08-05). Each is declared, so a caller binds silently to libc.so.6 and the 'self-contained' binary grows a DT_NEEDED
feature-b-rtl-missing-fpc-surface-2026-08 B 35 feature Missing FPC surface found by the differential probe (Eoln, TSeekOrigin, Sorted, IncMonth)
feature-b-textreadchar-with-pushback B 50 feature lib/rtl/textfile.pas needs TextReadChar(var f; var c) with one-character pushback, so read(f, c) can consume ONE character like FPC instead of a whole line
feature-b-tstrings-commatext B 30 feature TStrings.CommaText / DelimitedText are missing
feature-c-csmith-differential-fuzzing C 60 feature C differential fuzzing (csmith vs gcc) — campaign, PAUSED with the harness live
feature-c-esp-conformance-coverage S 35 feature C conformance / feature coverage on ESP (xtensa + ESP32-C3 riscv32 bare)
feature-c-gtk3-header-final-wiring C 45 feature GTK3 header import final wiring
feature-c-package-namespace-decision A 40 feature Decide the Pascal-import namespace for C packages (uses zlib collision)
feature-c-vla-via-alloca C 50 feature C variable-length arrays, lowered through alloca
feature-cdecl-bodied-sysv-prologue A 40 feature Bodied Pascal cdecl procs: genuine SysV prologue (float params, >6 args)
feature-cli-widgetset-flag A 20 feature CLI: --widgetset=<name> as sugar for -dWIDGETSET_<NAME>, so the flag reads like Lazarus' -ws
feature-cross-frontend-interop-contract A 45 feature Cross-frontend interop contract — umbrella
feature-crtl-implement-libc-assumptions B 10 feature crtl: implement the libc assumptions real-world C leans on
feature-demo-nilpy-ide E 40 feature Landmark demo: a minimal IDE in Nil-Python via import tk — max functionality, minimal code feature-nilpy-break-continue, feature-nilpy-tk-binding
feature-demo-portable-userland E 55 feature PXX portable userland (mini OS-personality) — one shell, any kernel
feature-demo-songformatter-pxx-target E 50 feature songformatter as a pxx compile target (nilpy) — GUI editor + live preview feature-lib-pxxpdf-reportlab-compat, feature-nilpy-re-module, feature-nilpy-tkinter-facade
feature-dns-esp-backend S 35 feature DNS on ESP — bind lwIP's getaddrinfo, do NOT build a separate backend
feature-dynamic-compiler-tables A 45 feature Dynamic compiler tables — kill the fixed array[0..MAX_*] ceilings (+ dynarray dogfood)
feature-dynamic-include-paths-config A 45 feature Dynamic Include Paths, Configuration Files, and System Scanner
feature-dynamic-soname-discovery A 45 feature Dynamic soname discovery (no execve)
feature-dynarray-copy-nested-element-type A 45 feature Copy() on a NESTED dynamic array (array of array of T) is refused. It used to segfault: the raw byte copy moved sub-array handles using the DEEPEST element's size. FPC supports it.
feature-dynarray-insert-delete-managed-elements A 45 feature Dynarray Insert/Delete: managed elements, record/set Insert, field/element targets
feature-embed-dwscript-rtti P 45 feature DWScript — compile under pxx + RTTI auto-bind (scripting stress test)
feature-embed-pascal-script P 45 feature RemObjects Pascal Script — compile under pxx (embeddable scripting)
feature-emission-size-dce A 45 feature Emission size — reachability-gated dead-code elimination (umbrella)
feature-esp-hardware-flash-validation S 45 feature ESP32 real-hardware flash + boot validation (S2/S3, C3)
feature-esp-peripheral-callback-api S 53 feature ESP32 peripheral callback API (timer / GPIO / ADC) — the user-facing "interrupt"
feature-float-exception-mask-control A 60 feature Float exception mask control (SetExceptionMask-style, FPC emulation opt-in)
feature-inline-asm-xmm-operands A 55 feature Inline asm cannot express float or vector code (no xmm operands, no packed SSE, no VEX, no cpuid)
feature-inline-asm-xtensa A 60 feature Inline asm blocks on xtensa (last leg of the multi-arch rollout)
feature-inline-nonleaf-and-branch-locals O 45 feature Inline expansion — remaining slices (branch-with-locals + non-leaf)
feature-lib-reportlab-fidelity-vs-oracle B 45 feature The reportlab mimic produces a VALID PDF, never one shown to agree with real reportlab. Differential-test lib/pcl/mimic_reportlab_* against CPython+reportlab on the same script
feature-mimic-fpc-compiler-define-profile A 50 feature FPC-compiler define profile (fpcdefs.inc build-config gates)
feature-move-fillchar-intrinsics A 45 feature Move / FillChar as compiler intrinsics (future optimization)
feature-n-nilpy-ast-typing-module-scope N 55 feature NilPy: type MODULE locals from the AST too
feature-nested-routine-fixed-array-capture A 35 feature Nested routines: capture of fixed-size array locals not supported
feature-networking B 20 feature Networking runtime
feature-nilpy-arc-cross-parity A 35 feature NilPy object-ARC cross-target parity (aarch64 inline arms + scope-exit)
feature-nilpy-arithmetic-dunders-full-protocol N 40 feature Arithmetic dunders (__add__, __sub__, …) — full protocol
feature-nilpy-arithmetic-ordering-dunders N 60 feature NilPy arithmetic/ordering dunders — umbrella
feature-nilpy-break-continue A 40 feature NilPy: support break / continue in while (and for) loops — v1 subset lacks them
feature-nilpy-collections-and-string-methods A 50 feature NilPy: list / dict + string methods (split/join/strip)
feature-nilpy-corpus-uforth N 55 feature NilPy corpus: uforth — a real Python Forth system as Track N's forcing target
feature-nilpy-cpyext-c-api-from-source N 65 feature cpyext: compile a CPython C extension's SOURCE against our own Python.h
feature-nilpy-dataclass-expression-field-default N 40 feature A @dataclass field default may only be a scalar literal, field(default_factory=list/dict) or a zero-arg lambda. An expression (x: int = 2 + 3) is refused; a plain class attribute with the same initialiser is evaluated
feature-nilpy-for-loop-getitem-protocol-fallback N 25 feature for x in obj: doesn't fall back to __getitem__/__len__ for a custom container
feature-nilpy-hasattr-per-instance-assigned-tracking N 40 feature hasattr reports True for a field the instance never assigned — if flag: self.m = 1 then hasattr(a,"m") on a False path answers True where CPython answers False. The remaining half of the DECIDED decide-nilpy-hasattr-per-instance-semantics: the per-instance assigned bit.
feature-nilpy-hoist-constant-container-literals-out-of-a-loop-condition N 30 feature NilPy: while x in (\"a\",\"b\") now rebuilds the constant tuple on every test. A provably-constant container build is loop-invariant and should be hoisted to a variable once — what a person would write by hand — while everything else keeps being folded into the condition.
feature-nilpy-idf-import A 45 feature nilpy includes anything from ESP-IDF and it just works feature-c-source-frontend, feature-esp32-idf-xtensa
feature-nilpy-lambda-compiled-closure N 45 feature nilpy: lambdas are interpreted by pyeval — compile them like nested defs (perf + one semantics)
feature-nilpy-list-sort-inplace-key-reverse N 30 feature xs.sort(key=..., reverse=...) — only the free function sorted() supports key/reverse
feature-nilpy-map-and-filter-over-a-lambda N 40 feature map(lambda ...) is unimplemented and filter does not exist
feature-nilpy-multi-arg-callback-bridges N 35→40 feature nilpy runtime: pycallback_call2/3 and a multi-parameter bound-fn call, so a callable can receive more than one own argument
feature-nilpy-nested-def-as-value N 15 feature SUPERSEDED: nested def as a VALUE (stored, passed, returned)
feature-nilpy-parallel-for-in A 5 feature NilPy parallel for-in — lower a marked for-loop to the shared PXXParallelFor runtime decide-nilpy-parallel-capture-semantics
feature-nilpy-process-exec-binding N 45 feature nilpy: os.system / subprocess-shaped process spawning over the RTL's libc-free execve
feature-nilpy-runtime-method-dispatch-on-variant N 50 feature NilPy: dispatch a method call on a VARIANT receiver at RUNTIME
feature-nilpy-set-needs-runtime-tag-for-display-and-equality N 40 feature A set needs its own runtime tag — two divergences from list share this root cause
feature-nilpy-small-syntax-gaps-found-by-the-2026-08-06-sweep N 30 feature Ordinary Python forms NilPy diagnoses cleanly but does not accept. print(sep=) and str.format() with 3+ (and 0) placeholders are DONE (2026-08-08); ten rows remain: enumerate(str), type(x) other than .name, a non-name lambda default, dict(x=1), .update(b=2), extended-slice assign, self.class.name, nested unpacking, bare tuple, two-for comprehension
feature-nilpy-starred-and-nested-unpacking N 50 feature Starred and NESTED unpacking targets
feature-nilpy-staticmethod-and-classmethod N 35 feature @staticmethod and @classmethod are rejected
feature-nilpy-stdlib-coverage-gaps-measured N 30 feature Measured stdlib coverage: json and re are solid; os, time and math.fabs are absent
feature-nilpy-str-format-named-keyword-fields N 25 feature "{name} is {age}".format(name=..., age=...) — named fields not supported
feature-nilpy-thirdparty-libraries-as-targets N 60 feature META: third-party Python libraries as pxx targets — classify, then compile
feature-nilpy-tkinter-facade N 50 feature nilpy: tkinter-shaped façade over lib/pcl/tk.pas — widget objects, kwargs, command callbacks feature-nilpy-star-args-kwargs
feature-nilpy-yield-outside-a-for-loop N 35 feature yield only works inside a for — a while-loop generator does not compile
feature-opt-accumulator-value-tracker O 58→60 feature The register-value scaffold two -O passes are blocked on: a single choke point for every write to the accumulator, so a 'rax currently holds symbol S' fact can be maintained without a silent-miscompile risk. Today rax is written from hundreds of scattered raw EmitB sites.
feature-opt-alloc-intent-hint O 25 feature Allocation-intent hint: tell the RTL growth policy how a buffer will be used
feature-opt-bulk-copy-is-byte-at-a-time O 45 feature The runtime's bulk-copy primitives move ONE BYTE per iteration. Copy() on a 64-element array is ~23x slower than FPC's (2.54s vs 0.11s over 3M copies). A word-at-a-time loop -- ~10 lines, portable, no backend work -- was prototyped and measured at 3.3x of that back.
feature-opt-complex-packed-double O 35 feature Complex as a packed-double XMM value (SSE2/SSE3)
feature-opt-float-register-temporaries O 20 feature float kernels: -O3 now 1.97x vs FPC (was 4.2x); residual = the rax value model — multi-session xmm-resident rewrite
feature-opt-heap-per-thread-cache O 55 feature Heap allocator serializes under threads — parallel alloc is 3x SLOWER than serial
feature-opt-o3-register-pressure O 58 feature -O3 register-pressure tier: operand scheduler + liveness-scaffold register allocator
feature-opt-rtti-emit-on-use O 40 feature RTTI is emitted unconditionally (every class, even a classless program) — dead weight on ESP32/embedded
feature-p-assertions-directive-and-position P 40 feature Implement FPC assertion parity: {$ASSERTIONS ON/OFF} and -Sa gating (Assert compiled OUT when off, so its side effects do not run), plus the '(file, line N)' suffix FPC appends to the message
feature-pal-esp-posix-fd-semantics S 30 feature ESP PAL: exact POSIX fd semantics over ESP-IDF VFS
feature-parallel-load-sampler-refine B 20 feature Parallel load sampler — refinements (ramp/EMA, BSD/cgroup) feature-os-targets-bsd-mac
feature-pascal-asmmode-directive-tolerance A 50 feature Accept {$asmMode default} (and other non-intel asmmode values)
feature-pascal-builtin-tobject-class A 42 feature Builtin TObject class — var o: TObject + TObject.Create + root methods
feature-pascal-class-management-operators P 48 feature class operator + named operators (Initialize/Finalize/Explicit/...)
feature-pascal-corpus-expansion P 15 feature Pascal real-world corpus expansion — the ladder Track P never had
feature-pascal-corpus-fpc-testsuite P 60 feature Pascal corpus rung 1 — FPC test-suite subset (conformance)
feature-pascal-corpus-oop P 60 feature Pascal OOP corpus — real libraries that hammer classes/interfaces/generics
feature-pascal-corpus-passrc P 45 feature Pascal corpus: fcl-passrc — ENDGAME. Deep class hierarchy + resolver (60k src, 40k tests) feature-pascal-corpus-fpcunit, feature-pascal-corpus-fpjson
feature-pascal-exitcode-finalization-halt A 45 feature ExitCode global + unit finalization execution + FPC Halt semantics (Halt sets ExitCode, runs finalizations, exits with ExitCode)
feature-pascal-initialize-finalize-intrinsics A 50 feature Initialize() / Finalize() standard procedures (managed-type intrinsics)
feature-pascal-type-helpers A 55 feature record helper for T / type helper for T — type helpers
feature-pasmith-divergence-signature-granularity T 35 feature pasmith divergence signatures are too coarse: end-of-program divergences all collapse to pxx-vs-fpc_trace-length, so distinct bugs can over-dedup and hide each other
feature-pasmith-multi-unit-programs T 55 feature pasmith: generate multi-UNIT programs — the last structurally unreachable bug class
feature-pasmith-qplus-rplus-rungs T 30 feature pasmith rungs for {$Q+}/{$R+}: generate checked regions + try/except EIntOverflow/ERangeError harnesses, differential vs FPC
feature-pcl-cross-platform-gui B 30 feature UMBRELLA: cross-platform GUI — copy the LCL widgetset model; PCL = TComponent tree behind a TWidgetSet seam; compile-time widgetset select; sparse widgetset×OS matrix, hard-fail the rest feature-pcl-seam-seal, feature-pcl-widgetset-select, feature-pcl-win32-widgetset
feature-pcl-tk-windows-compat B 25 feature NilPy tk on Windows — quarantine the Tcl/Tk-DLL-swarm problem behind a {$ifdef WINDOWS} include in tk.pas; emulate/wrap, stub now fill later. Linux keeps the real embed feature-port-windows-pe
feature-pcl-win32-widgetset B 25→30 feature PCL: native Win32 widgetset — a 2nd TWidgetSet subclass over user32/gdi32, zero-dep (no GTK bundle). Best-effort, UN-GATED (no Windows box, Wine-smoke only) feature-pcl-seam-seal, feature-port-windows-pe
feature-port-freebsd-native A 55 feature FreeBSD/amd64 native target — raw-syscall ELF, own syscall table, carry-flag error convention, ELF brand
feature-port-multi-os-abstraction A 55 feature UMBRELLA: abstract the target-OS axis — FreeBSD (native) + Windows (PE, Wine-tested), phased feature-port-freebsd-native, feature-port-rtl-over-libc, feature-port-windows-pe
feature-port-openbsd-libc A 50 feature OpenBSD/amd64 target — route RTL through libc.so; pinsyscalls satisfied by construction feature-port-rtl-over-libc
feature-port-rtl-over-libc A 55 feature RTL-over-libc lowering mode — route runtime primitives through a system C library instead of raw syscalls
feature-port-windows-pe A 25→55 feature Windows/x64 target — PE/COFF writer, MS x64 ABI, IAT imports; testable via Wine feature-port-rtl-over-libc
feature-promo-launch-plan A 25 feature Promo & launch plan — visibility now, 0.1 beta next, the loud moment last
feature-pyeval-closure-as-native-word N 50 feature pyeval: a nested def passed to a host method, called back later (closure-as-native-word)
feature-random-library B 45 feature Random library — HW/OS/software tiered RNG (cross-target capability test) feature-inline-asm-xmm-operands
feature-real-dynlib-loader B 45 feature Real dynamic-library loader (dlopen) — PAL primitives + libc policy bug-pascal-procvar-in-value-context-takes-address-instead-of-calling
feature-release-checksums-repro A 50 feature Verifiable releases: checksums + signatures + the reproducible-build claim
feature-signal-siginfo-ucontext A 55 feature Signal handlers, phase 2: SA_SIGINFO + ucontext, threadsafe masks, sigaltstack, FPC-compat surface
feature-t-est-mem-from-measurement T 55 feature testmgr estimates the selfhost job at 1200 MB; measured peak RSS is 156 MB. An 8x error in one class means none of them were measured — it both under-packs big boxes and will exclude small ones
feature-t-fpc-seed-canary-closer-to-the-dev-loop T 55 feature The FPC seed build breaks every couple of days, always the same way, and only the watcher ever notices — yet it costs 10.7s. Put it where the person who broke it will see it.
feature-t-nilpy-cpython-differential-fuzzer T 20 feature NilPy differential fuzzer — generate NilPy programs, diff pxx output against CPython as oracle
feature-t-per-invocation-tmp-namespace-for-make-recipes T 55 feature The Makefile's ~3700 fixed /tmp/test_* output paths make two concurrent make test* runs on one box clobber each other; route them through a per-invocation temp dir
feature-t-testmgr-owns-pinning-interruptible T 60 feature Move the pin gate into testmgr so pinning is scheduled, resource-aware and INTERRUPTIBLE, instead of a long foreground gate.sh run a dev agent has to babysit
feature-t-uforth-benchmark-harness T 45 feature Track T: uforth benchmark harness — pxx-compiled vs interpreted Python baselines
feature-t-windows-wine-harness T 25 feature Windows/Wine test bed — scratch-prefix wine runner + mingw-w64 differential oracle, hello-world gate
feature-threadsafe-heap-optimize A 53 feature Threadsafe heap — optimize + cross-target (M5)
feature-tls-provider-abstraction B 53 feature TLS provider abstraction — pluggable backends (OpenSSL + handrolled) feature-tls13-from-scratch
feature-toolchain-cli-ux A 45 feature Toolchain CLI / user tooling (install, config, discovery, doctor, selfcheck)
feature-twatch-full-tier-coverage-age T 40 feature No signal distinguishes "full tier is lagging" from "full tier never completes"
feature-typeinfo-all-types A 50 feature TypeInfo(T) for every type, not just enums
feature-typinfo-facade-unit B 50 feature typinfo facade unit: FPC's RTTI API shapes over OUR blobs feature-typeinfo-all-types
feature-unicodestring-model A 40 feature A real UnicodeString / WideChar model (UTF-16), or an honest refusal
feature-web-track-w-bootstrap A 40→45 feature Track W (website) — bootstrap the lane: two repos, one board
feature-web-tracker-and-host-portability A 45 feature Public tracker on GitHub + host-portability rule (nothing lives only in a service) feature-web-track-w-bootstrap
feature-writeln-as-library A 45 feature write/writeln as a library function (via array of const + variadic sugar)
idea-adaptive-heap-growth A 10 idea Adaptive heap growth policy (research / north-star — not scheduled)
idea-c-realworld-test-targets C 25 idea Real-world C programs as compiler stress tests (brainstorm)
idea-cross-namespace-ambiguity-warning A 10 idea Warn when a call name matches in BOTH the Pascal and C namespaces
idea-public-status-page D 30 idea Publish a live compatibility/corpus status report on the website — the static docs/reference/status.md page exists; wire it to the already-generated tstate reports (twatch_web conformance.html/bench.html/dashboard.html) so public numbers stay current instead of hand-maintained
meta-constant-normalisation A 45 meta Standing index: stop writing compiler code that branches on constant-vs-variable. Each constant expression becomes its own uniquely-named read-only variable, so downstream has ONE shape to handle. Goal is less double work on future fixes, not speed.
meta-dialect-extensions-and-fpc-strict A 60 meta Meta: pxx dialect extensions ⟷ FPC compatibility (two aims, switch-guarded)
meta-t-dev-throughput-and-track-a-t-integration T 40 meta META: development is wait-limited, not token-limited. Dev tracks stop running suites; T owns breadth and its report LATENCY becomes the product. Coordinates the tooling tickets that get us there.
perf-c-parse-codegen-large-file-superlinear A 30 perf perf: C parse+codegen shows mild superlinear scaling on very large amalgamations
perf-nilpy-remaining-perbyte-string-builders N 30 perf NilPy: remaining pylib string builders still append per-byte (O(n²))
refactor-a-variant-object-tag-list-lives-in-four-places A 45 refactor The set of variant tags whose payload is a refcounted object is written out in FOUR independent places; a tag added to some and not others leaks silently, with RSS as the only symptom. One of them also just zeroes object payloads outright.
refactor-centralize-managed-string-pchar-conversion A 45 refactor Populate pointer-element-type metadata consistently (additive, fallback-preserving) — kill the recurring silent PChar/WideChar-conversion class at its source
regression-test-i386-test-dynarray-field T 70 regression regression: test-i386#src:test/test_dynarray_field.pas red at 899e51cda3ba (auto-filed by twatch)
regression-test-nilpy-test-nilpy-for-two-names-over-a-variant T 70 regression regression: test-nilpy#src:test/test_nilpy_for_two_names_over_a_variant.npy red at b51f4eeffbf9 (auto-filed by twatch)
regression-test-nilpy-test-nilpy-function-values T 70 regression regression: test-nilpy#src:test/test_nilpy_function_values.npy red at 082e5175beba (auto-filed by twatch)
task-b-revert-pxxcio-clock-int64-cast-workaround B 45 task Revert the __pxx_clock workaround in lib/rtl/pxxcio.pas — its blocker (the explicit Int64() cast of a NativeInt on 32-bit) is fixed, and the idiomatic one-liner is verified correct on x86-64, i386 and arm32
task-d-document-warn-ignored-directives D 30 task New --warn-ignored-directives flag needs a row in docs/reference/cli.md, and the routine-directive table in docs/language/dialect.md should point at it as the way to find out which markers are inert
task-pascal-conformance-long-tail P 12 task FPC-conformance long tail: RTL gaps, runtime faults, small parser holes
task-t-drop-stale-known-tags-on-string-h-probes T 50 task Four gcc_diff_probe cases are still tagged known but no longer diverge — the compiler bug behind them is fixed, so the tag now hides future regressions in str-chr-nul / str-str-empty / mem-chr-miss
task-t-enroll-libtest-demos-watcher T 45 task Enroll make lib-test + make demos in testmgr tiers — Track B's gate is invisible to tstate
task-t-enroll-pascal-conformance-tier T 45 task Enroll test-pascal-conformance in testmgr tiers (sharded, like the C battery)
task-t-xeon-host-local-health-alerting T 50 task The health VERDICT landed (trackt health, e6ee21fcc) but nothing on xeon delivers it — no timer, no toast. The watcher can go wedged with nobody told.

experimental (20)

Ticket Track Prio Type Summary Blocked-by
feature-erlang-frontend-scoping A 65 feature Erlang frontend — scoping only
feature-esoteric-ada A 65 feature Esoteric probe: Ada
feature-esoteric-cobol A 45 feature Esoteric probe: COBOL
feature-esoteric-frontend-probes A 60 feature Esoteric/legacy frontend probes — umbrella (new category: "esoteric")
feature-js-frontend-parked A 45 feature JavaScript frontend — PARKED (architectural wall on the stated goal)
feature-pascal-schema-types A 30 feature schema types (ISO 10206 value-parameterized types) — experimental
feature-r-frontend-parked A 45 feature R frontend — PARKED (dynamic-runtime language, not a math overlay)
feature-rust-borrowed-slice-type R 45 feature Rust frontend — borrowed slice type (&[T], generalized &str)
feature-rust-corpus-chess R 0 feature Rust corpus: the own-written chess engine as Track R's real-world target
feature-rust-derive-macros R 45 feature Rust frontend — derive-macro codegen
feature-rust-drop-move-tracking R 45 feature Rust frontend — Drop-on-scope-exit + move tracking
feature-rust-dyn-trait-dispatch R 45 feature Rust frontend — dyn Trait dispatch for arbitrary types
feature-rust-frontend R 60 feature Rust frontend — umbrella
feature-rust-macro-rules R 60 feature Rust frontend — macro_rules! (scope-cut: builtins first)
feature-rust-misc-semantics R 45 feature Rust frontend — integer overflow mode + format-string parser
feature-rust-rtl-concurrency R 45 feature Rust frontend RTL — thread / atomics / mpsc shims
feature-rust-rtl-core-types R 45 feature Rust frontend RTL — Option<T> / Result<T,E> / Box<T> / Vec<T>
feature-rust-rtl-macros-io R 45 feature Rust frontend RTL — println!/format!/vec!/assert!/panic! runtime
feature-wasm-frontend A 45 feature WebAssembly frontend — statically typed, IR-shaped; experimental
feature-zig-frontend Z 45 feature Zig frontend — THEORETIC COMPLETION reached (frontend-side); experimental

rainy-day (33)

Ticket Track Prio Type Summary Blocked-by
bug-nilpy-dict-mutation-during-iteration-is-unobserved-not-raised N 35 bug Mutating a dict while iterating it is silently unobserved; CPython raises RuntimeError 'dictionary changed size during iteration' decide-nilpy-dict-mutation-during-iteration
decide-abi-portable-vs-target-split U 60 decide
decide-ilja-tui-render-model U 45 decide Track U: four render/input questions Ilja (TUI IDE face) must answer before any code
design-overloadable-intrinsics A 50 design Design question: overloadable compiler intrinsics (the Copy precedent)
design-record-copy-dynarray-field-semantics A 50 design Record copy with a dynamic-array field: PXX deep-copies, FPC shares (reference)
experiment-compile-fpc-as-stress-probe B 50 experiment Experiment: compile FPC's own source as a pxx stress probe
feature-additional-cpu-targets A 50 feature Additional CPU targets (rollup: i386 → aarch64 → arm32 → ESP32/RISC-V) feature-target-aarch64, feature-target-arm32, feature-target-esp32, feature-target-i386
feature-allocator-quality A 50 feature Allocator quality: split / coalesce / bins / alignment
feature-async-auto-backend A 50 feature Auto stackless/stackful backend selection
feature-dwarf-debug-info A 50 feature DWARF debug info (-g) — phased, x86-64 first
feature-eliah-ai-command-rail B 45 feature feature: Eliah AI command rail + console pane
feature-extended-type-support A 50 feature Proper Extended type support (currently aliased to Double)
feature-fpc-vs-pxx-feature-boundary A 50 feature Policy: FPC-bootstrap subset vs PXX-only library features
feature-handle-compacting-heap A 50 feature Handle-table compacting heap (anti-fragmentation for constrained RAM)
feature-ilja-tui B 45 feature Ilja — TUI (ANSI) face
feature-kernel-matrix-bootroom E 50 feature Kernel-matrix bootroom: one static PXX binary, swept across many Linux kernels
feature-mode-delphi-remaining A 50 feature {$mode delphi} — remaining @-relax edge slices
feature-nilpy-runtime-dunder-dispatch-on-variants N 45 feature Runtime dunder dispatch for a user class held in a Variant decide-nilpy-runtime-dunder-dispatch-strategy
feature-no-ansistring-profile A 50 feature No-AnsiString / bounded-string profile
feature-os-targets-bsd-mac A 50 feature Additional OS targets (BSD / macOS via syscall mapping)
feature-port-macos A 20 feature macOS/arm64 target — BLOCKED: needs Apple hardware+software (Mach-O + mandatory signing + libSystem)
feature-rtl-math-on-crtl-dd-kernels B 10 feature RTL math.pas on the crtl dd kernels — correct rounding for Pascal too
feature-rtl-optout-for-lcl A+B 45 feature Opt out of pxx's own RTL/widget layer (for compiling LCL) — without pulling FPC's RTL
feature-stackful-coro-port A 50 feature Port the stackful coroutine backend to all targets
feature-static-arena-profile A 50 feature Fixed-static-arena allocator profile feature-unified-heap-allocator
feature-t-host-roles-native-vs-qemu-topology T 65 feature Track T is becoming multi-host with DIFFERENT PURPOSES per box — xeon runs the matrix, arm32/arm64 rPis exist only as native oracles against xeon's QEMU — but profiles express resource ceilings, not purpose, and nothing compares two hosts' results
feature-tls13-from-scratch B 53 feature TLS 1.3 from scratch — syscall-only (Pascal handshake + kTLS bulk)
feature-track-t-agent T 60 feature Track T face 2: agentic test manager — reads tstate, crafts tickets, owns the T codebase feature-track-t-watcher
goal-compile-fpc-compiler A 50 goal 🗼 Lighthouse — compile the FPC compiler (pp.pas) with PXX
goal-compile-linux-tinyconfig C 50 goal 🗼 Lighthouse — boot a Linux tinyconfig kernel built with PXX's C frontend
idea-demo-app-candidates E 50 idea Demo / test application candidates — selection criteria + catalog
idea-unit-rename-import B 50 idea uses X as Y unit-rename import (dialect extension)
idea-visibility-enforcement B 50 idea Enforce private/protected visibility

done-followup (3)

Ticket Track Prio Type Summary Blocked-by
bug-t-corpus-regex-invents-phantom-tree T 55 bug CORPUS_RE matches prose in a SKIP message and invents corpus 'stb)', permanently skipping a job that also carries a non-corpus regression test
feature-async-language-surface A 50 feature Async language surface + stackless coroutine backend feature-cross-target-feature-parity
feature-string-model-tyfixedstring B 50 feature String model overhaul: tyFixedString + managed string + Str/Val

decided (51)

Ticket Track Prio Type Summary Blocked-by
decide-1-0-scope-promise A 55 decide DECIDE: version scheme — pin count / N, not semver
decide-3rd-party-vendor-vs-fetch U 45 decide Policy: how to carry dependency-grade third-party source — vendor in-tree vs fetch-gitignored vs system-dynamic
decide-assertions-directive-and-message-format U 40 decide FPC compiles Assert OUT unless -Sa/{$ASSERTIONS ON} and appends '(file, line N)' to the message; pxx always evaluates and omits the position. Adopt both, neither, or one?
decide-builtin-and-library-code-sharing U 30 decide A builtin unit and lib/rtl cannot share code today: moving the shared part down breaks library READABILITY (you must be able to step into sysutils and read it straight through), and letting a builtin use the library collides in NilPy's flat unit scope. The float core is being copied because of it. Review when the next clash lands — not a blocker for anything now.
decide-class-namespace-scoping U 65 decide Decide: how should two libraries be allowed to export the same class name?
decide-constructor-exception-cleanup-semantics A 60 decide DECIDE: constructor-exception-cleanup semantics (auto-Destroy on failed Create?)
decide-crtl-libm-glibc-bit-parity A 50 decide
decide-dns-libc-backend-shape U 40 decide Track U: how should a libc-backed DNS resolver be reached from libc-free static ELF?
decide-dynamic-array-value-vs-reference-semantics U 55 decide dynamic arrays: pxx gives b := a VALUE semantics (a copy), FPC/Delphi give REFERENCE semantics (an alias) — is ours deliberate?
decide-env-write-side U 40 decide Policy: does pxx support WRITING the environment (setenv/putenv, os.environ[k]=v) — and does a write reach a child?
decide-float-fixed-output-exact-or-fpc-17-digit-cap U 45 decide writeln(d:0:1) of a huge double: pxx and CPython print the EXACT value (18446744073709551616.0), FPC caps at 17 significant digits and zero-pads (18446744073709552000.0). Which is pxx's rule? bug-a-write-fixed-emits-false-digits-past-1e22
decide-gate-line-convention U 60 decide Should ticket Gate: lines prescribe the long local suite, or the 40s native confirm plus Track T offload? Today they say the former while CLAUDE.md says the latter.
decide-gpc-as-corpus-target U 45 decide Track U: reject the GPC corpus wish, or keep it? Two sweeps have called it a rejection candidate.
decide-int-div-zero-behavior-unification A 43 decide DECIDE: unify integer div/mod-by-zero behavior across targets
decide-ipv6-dualstack-and-aaaa-ordering U 40 decide Policy: IPV6_V6ONLY on a :: listener, and which address wins when a host has both A and AAAA
decide-nilpy-and-or-return-operand-or-bool U 40 decide decide: should NilPy's and / or return an OPERAND, as Python does?
decide-nilpy-arithmetic-dunder-scope U 60 decide Decide: how far does NilPy follow Python's arithmetic/ordering dunder protocol?
decide-nilpy-bigint-vs-64bit-cells U 40 decide decide: NilPy integer semantics — arbitrary precision vs 64-bit (uforth needs one)
decide-nilpy-builtin-keyword-only-parameters U 40 decide Should NilPy builtins enforce Python's KEYWORD-ONLY parameters?
decide-nilpy-class-attribute-instance-read-model U 65 decide How should inst.attr read a CLASS attribute? Full Python fall-through with per-instance overrides (correct, invasive), or a whole-program static specialisation using the PyDynAttrEverAssigned-style scan already in the frontend (cheaper, correct for programs that never override per instance)? Blocks bug-nilpy-class-attribute-unreachable-through-the-class-name.
decide-nilpy-closure-model A 50 decide
decide-nilpy-dict-mutation-during-iteration U 35 decide Raise on dict mutation during iteration, or keep the snapshot?
decide-nilpy-gui-tk-vs-pcl A 25 decide RESOLVED 2026-07-21: keep the real Tcl/Tk embed on Linux (works); Windows = opt-in tk emulate/wrap via a platform include, later. Follow-up: feature-pcl-tk-windows-compat
decide-nilpy-hasattr-per-instance-semantics U 35 decide decide: should NilPy's hasattr answer per-INSTANCE or per-CLASS?
decide-nilpy-int-promotion-costs-10x-on-ordinary-loops U 60 decide Option 1 was decided without a number; the number is 10x
decide-nilpy-int-promotion-default U 60 decide Decide: should NilPy int bindings default to promotable, not native int64?
decide-nilpy-mixed-type-operand-policy U 60 decide Decide: what should NilPy do when an operator gets operand types Python rejects?
decide-nilpy-multiple-inheritance-c3-or-delegate U 40 decide class D(B, C) is refused with a clear diagnostic (option 3 landed 2026-08-04). The FEATURE is still open and the remaining choice is a design fork: full C3 linearisation, or second-base-as-delegate. Needs a call before anyone builds it.
decide-nilpy-optional-int-none-vs-zero U 60 decide decide: NilPy Optional[int] — None must be distinct from 0
decide-nilpy-runtime-dunder-dispatch-mechanism U 45 decide Decide: how should NilPy dispatch dunders on an instance whose class is known only at RUN time (container elements)? decide-nilpy-runtime-dunder-dispatch-strategy
decide-nilpy-runtime-dunder-dispatch-strategy U 45→55 decide Decide: how should NilPy dispatch dunders on a Variant-held instance?
decide-nilpy-set-as-a-distinct-type-or-a-list U 55→60 decide pxx backs a Python set with TPyList. That makes set difference work, makes list - list unrejectable, and makes a set repr as [1, 3] instead of {1, 3}. Give sets their own row, or keep the alias and pay at run time?
decide-nilpy-str-is-bytes-or-codepoints U 55 decide NilPy strings are BYTES where CPython's are code points: len('héllo')==6, s[1] is half a character, and s[::-1] silently produces invalid UTF-8. Decide the target — full code-point str, UTF-8-aware indexing over the byte buffer, or a documented ASCII-only limit
decide-nilpy-transitive-nested-def-capture U 40 decide decide: NilPy transitive capture for sibling nested-def calls
decide-nilpy-where-the-exact-decimal-float-core-lives U 60 decide NilPy's float repr needs exact decimal digits + a correctly-rounded strtod. Both exist, in lib/rtl/sysutils.pas — which a BUILTIN unit may not use (builtins sit below the Track B libraries, and pylib dragging sysutils in would link it into every NilPy program). Move the core down into a builtin unit, duplicate it, or relax the layering? Blocks bug-nilpy-float-repr-is-not-pythons-shortest-roundtrip.
decide-pascal-uses-campaign-scope U 55 decide Decide: how should the uses-is-transitive fix be scoped and sequenced?
decide-pcl-may-use-pylib U 55 decide decide: may a PCL library unit use pylib (Python runtime types) to accept Python-shaped arguments?
decide-promoint-rvalue-representation U 85 decide Promotable int: what IS an rvalue once heap bignums exist?
decide-pxxpdf-ticket-obsolete U 50 decide Close feature-lib-pxxpdf-reportlab-compat as obsolete, or keep it?
decide-pyeval-bignum-strategy U 40 decide decide: how should pyeval handle arbitrary-precision (bignum) integers?
decide-re-pin-after-the-dynarray-aliasing-flip U 70 decide The dyn-array aliasing flip (937c51dc2) is a codegen change, so gate.sh quick reads RED on its pinned-seeded fixedpoint step for EVERY lane until pinned is refreshed. Re-pin now, or wait for T's full matrix?
decide-rtti-none-semantics A 40 decide decide: --rtti=none semantics — what happens to the FUNCTIONAL parts of the RTTI blob?
decide-runtime-primitive-layering U 70 decide Where does a runtime primitive live? — DECIDED: a PAL per language
decide-scope-hiding-vs-flat-overload-set U 60 decide One rule explains four separate symptoms: a declaration should HIDE a same-named one from an outer/earlier scope unless marked overload. pxx behaves as if everything were overload — one flat set, first-in-chain wins. Decide whether to adopt hiding, and which marker carries it: any {$mode}, --strict-overload/{$MIMIC FPC}, or the default
decide-t-notification-transport-poll-not-webhooks U 60 decide How Track T's findings reach an agent or a human: polling, never webhooks. 60s is the baseline; adaptive backoff is allowed but the daemon must not grow a time-based one.
decide-t-queue-scope-2026-08-03 T 60 decide User calls on four standing assumptions in the Track T queue: borg's watcher, the arm oracles, who may pin, and when the NilPy fuzzer earns its keep
decide-track-t-autopin-criteria U 55 decide What criteria justify Track T auto-pinning a stable binary?
decide-two-track-model-dev-and-regression-testing T 60 decide DECIDED: two operational tracks — development, and regression testing
decide-uforth-exec-leak-strategy U 55 decide decide: how to stop the pyeval exec'd-word per-call leak (uforth doloop 553 MB)
decide-variant-tag-mismatch-policy U 60 decide Decide: what a Variant unbox does when the tag does not match the target
decide-watcher-lifecycle-manual-only T 50 decide DECIDE: the watcher daemon is started and stopped BY HAND — no supervision

done (1491)

1491 ticket(s) — full table in BOARD-done.md, generated alongside this file.

rejected (30)

Ticket Track Prio Type Summary Blocked-by
bug-a-elf-so-missing-pt-gnu-stack A 60 bug pxx-emitted .so has no PT_GNU_STACK, so glibc >= 2.41 refuses to dlopen it: cannot enable executable stack
bug-a-nilpy-subscript-of-a-string-literal A 40 bug NilPy: subscripting a string LITERAL is a parse error
bug-a-threadsafe-heap-parallel-for-managed-string-race A 70 bug REJECTED — not a heap bug: was a shared captured-variable data race
bug-c-invalid-symbol-in-lea-sqlite C 50 bug C: invalid symbol in lea lowering sqlite amalgamation
bug-compiler-uses-unit-interactions A 50 bug Compiler self-build: two rough edges when uses-ing a real unit
bug-frozen-self-build-unreliable A 50 bug Frozen-string compiler self-build (bootstrap-frozen / stabilize-frozen) is unreliable
bug-lexer-identifier-ends-with-keyword A 50 bug Bug — Lexer misidentifies identifiers ending with keyword names (e.g. 'Class')
bug-nilpy-uforth-rc4-corpus-stack-underflow N 45 bug WITHDRAWN — not a pxx bug. ERROR: Stack underflow came from MY harness invoking INCLUDE testje.for; uforth's INCLUDE POPS a string, so the correct form is \"testje.for\" INCLUDE. With that, all four RC4 corpora are byte-identical to CPython.
bug-nonreproducible-miscompile-2026-06-02 A 50 bug Non-reproducible one-off miscompile (2026-06-02)
bug-pascal-local-var-not-registered-wrong-sym P 0 bug REJECTED — "a method's local is not registered" — my evidence was wrong
bug-str-float-broken-by-copy-shadow A 50 bug Str() builtin breaks for float formatting when a unit shadows Copy
bugfix-cfront-bitfield-packing-gcc-compat A+C 50 bugfix bugfix: C front — bitfield packing GCC-compatibility
chore-inc-to-units A 50 chore .inc → real .pas units refactor
chore-runtime-emission-size A 50 chore Finer runtime-support emission (code size)
decide-when-to-move-the-pin-after-a-long-fix-run U 60 decide 32 compiler fixes sit on master unpinned; Track B builds against pinned and has a workaround waiting on the move. Pin all at once, pin incrementally, or leave it — the brake is deliberate and this is a judgment call, not a default
feature-asm-structured-ir-library A 50 feature Unify inline asm onto the existing per-target text-assembler engine
feature-dynamic-compiler-arrays-ast-fixups A 25 feature Apply the dynamic-array pattern (proven on the IR arrays) to the other fixed compiler caps: AST nodes, global fixups, label arrays
feature-lazy-standard-unit-emission A 50 feature Lazy standard-unit emission / routine-level dead-code elimination
feature-opt-float-const-pool O 35 feature -O3: load float constants from a data pool, not GPR materialization
feature-opt-lazy-token-sval O 55 feature Lazy / conditional CurTok.SVal materialization — cut per-token string allocation
feature-t-bench-record-host-hardware-specs T 55 feature Benchmarks record the host name, but nothing about the hardware
feature-t-gcc-torture-runner T 20 feature gcc c-torture: ONE-TIME harvest of the ~50-80 runtime-fail miscompile candidates — NOT a permanent runner (dropped: mostly dialect-gap skip-list busywork)
regression-cascade-110774a14648 T 70 regression regression CASCADE: 17 jobs newly red at 110774a14648 (auto-filed by twatch)
regression-cascade-2026-07-18-mass-autofile-false-positive T 0 regression regression CASCADE: 1414 stub tickets auto-filed on 2026-07-18 — all false positives
regression-cascade-3d46e52fc733 T 70 regression regression CASCADE: 1471 jobs newly red at 3d46e52fc733 (auto-filed by twatch)
regression-cascade-6906a3416548 T 70 regression regression CASCADE: 18 jobs newly red at 6906a3416548 (auto-filed by twatch)
regression-cascade-f5c8fbec-fpc-bootstrap A 0 regression Cascade sweep: 939 auto-filed regressions at f5c8fbec6016 — one root cause, already fixed
regression-test-aarch64-test-cross-sysopen-family T 70 regression regression: test-aarch64#src:test/test_cross_sysopen_family.pas red at a5fc06ee29b6 (auto-filed by twatch)
regression-test-core-test-rust-chess-perft-full T 70 regression regression: test-core#src:test/test_rust_chess_perft_full.rs red at f5c8fbec6016 (auto-filed by twatch)
wish-compile-gnu-pascal B+C 45 wish Wish: compile GPC

Ready (no unmet blocker)

  • [p 70] [T] regression-test-i386-test-dynarray-field
  • [p 70] [T] regression-test-nilpy-test-nilpy-for-two-names-over-a-variant
  • [p 70] [T] regression-test-nilpy-test-nilpy-function-values
  • [p 65] [N] feature-nilpy-cpyext-c-api-from-source
  • [p 60] [O] feature-opt-accumulator-value-tracker (unblocks 1)
  • [p 60] [N] bug-nilpy-same-kind-undefined-operators-still-compute
  • [p 60] [P] bug-p-uses-order-does-not-decide-which-unit-wins
  • [p 60] [T] bug-t-a-self-healed-red-leaves-a-permanent-prio-70-stub-at-the-head-of-the-queue
  • [p 60] [T] bug-t-gate-sh-fixedpoint-does-not-iterate
  • [p 60] [A] feature-a-abi-oracle
  • [p 60] [C] feature-c-csmith-differential-fuzzing
  • [p 60] [A] feature-float-exception-mask-control
  • [p 60] [A] feature-inline-asm-xtensa
  • [p 60] [N] feature-nilpy-arithmetic-ordering-dunders
  • [p 60] [N] feature-nilpy-thirdparty-libraries-as-targets
  • [p 60] [P] feature-pascal-corpus-fpc-testsuite
  • [p 60] [P] feature-pascal-corpus-oop
  • [p 60] [T] feature-t-testmgr-owns-pinning-interruptible
  • [p 60] [A] meta-dialect-extensions-and-fpc-strict
  • [p 58] [O] feature-opt-o3-register-pressure
  • [p 55] [A] feature-port-rtl-over-libc (unblocks 3)
  • [p 55] [A] feature-inline-asm-xmm-operands (unblocks 1)
  • [p 55] [A] feature-port-freebsd-native (unblocks 1)
  • [p 55] [N] bug-nilpy-set-is-a-list-not-a-set
  • [p 55] [T] bug-t-bench-slowdowns-are-quantized-by-cpu-p-state
  • [p 55] [T] bug-t-empty-range-regression-cannot-be-bisected
  • [p 55] [T] bug-t-gate-quick-fixedpoint-goes-red-on-any-builtin-addition
  • [p 55] [A] feature-a-declaration-phase
  • [p 55] [E] feature-demo-portable-userland
  • [p 55] [N] feature-n-nilpy-ast-typing-module-scope
  • [p 55] [N] feature-nilpy-corpus-uforth
  • [p 55] [O] feature-opt-heap-per-thread-cache
  • [p 55] [A] feature-pascal-type-helpers
  • [p 55] [T] feature-pasmith-multi-unit-programs
  • [p 55] [A] feature-signal-siginfo-ucontext
  • [p 55] [T] feature-t-est-mem-from-measurement
  • [p 55] [T] feature-t-fpc-seed-canary-closer-to-the-dev-loop
  • [p 55] [T] feature-t-per-invocation-tmp-namespace-for-make-recipes
  • [p 53] [S] feature-esp-peripheral-callback-api
  • [p 53] [A] feature-threadsafe-heap-optimize
  • [p 50] [A] feature-typeinfo-all-types (unblocks 1)
  • [p 50] [C] bug-c-static-functions-in-different-crtl-modules-collide
  • [p 50] [T] bug-t-tstate-launders-skip-into-pass
  • [p 50] [D] docs-devnotes-ai-assisted-build
  • [p 50] [B] feature-b-textreadchar-with-pushback
  • [p 50] [C] feature-c-vla-via-alloca
  • [p 50] [A] feature-mimic-fpc-compiler-define-profile
  • [p 50] [A] feature-nilpy-collections-and-string-methods
  • [p 50] [N] feature-nilpy-runtime-method-dispatch-on-variant
  • [p 50] [N] feature-nilpy-starred-and-nested-unpacking
  • [p 50] [A] feature-pascal-asmmode-directive-tolerance
  • [p 50] [A] feature-pascal-initialize-finalize-intrinsics
  • [p 50] [N] feature-pyeval-closure-as-native-word
  • [p 50] [A] feature-release-checksums-repro
  • [p 50] [T] task-t-drop-stale-known-tags-on-string-h-probes
  • [p 50] [T] task-t-xeon-host-local-health-alerting
  • [p 48] [P] feature-pascal-class-management-operators
  • [p 45] [A] feature-web-track-w-bootstrap (unblocks 2)
  • [p 45] [S] bug-a-riscv32-and-xtensa-have-no-atomic-codegen
  • [p 45] [N] bug-nilpy-pyeval-fallback-still-binds-host-kwargs-by-position
  • [p 45] [T] bug-t-pydiff-cpython-arm-fails-on-a-relative-path
  • [p 45] [T] bug-t-three-network-tests-flake-and-cost-real-debugging-time
  • [p 45] [A] chore-makefile-testtmp-parameterize
  • [p 45] [D] docs-canonical-domain
  • [p 45] [C] feature-c-gtk3-header-final-wiring
  • [p 45] [A] feature-cross-frontend-interop-contract
  • [p 45] [A] feature-dynamic-compiler-tables
  • [p 45] [A] feature-dynamic-include-paths-config
  • [p 45] [A] feature-dynamic-soname-discovery
  • [p 45] [A] feature-dynarray-copy-nested-element-type
  • [p 45] [A] feature-dynarray-insert-delete-managed-elements
  • [p 45] [P] feature-embed-dwscript-rtti
  • [p 45] [P] feature-embed-pascal-script
  • [p 45] [A] feature-emission-size-dce
  • [p 45] [S] feature-esp-hardware-flash-validation
  • [p 45] [O] feature-inline-nonleaf-and-branch-locals
  • [p 45] [B] feature-lib-reportlab-fidelity-vs-oracle
  • [p 45] [A] feature-move-fillchar-intrinsics
  • [p 45] [A] feature-nilpy-idf-import
  • [p 45] [N] feature-nilpy-lambda-compiled-closure
  • [p 45] [N] feature-nilpy-process-exec-binding
  • [p 45] [O] feature-opt-bulk-copy-is-byte-at-a-time
  • [p 45] [P] feature-pascal-corpus-passrc
  • [p 45] [A] feature-pascal-exitcode-finalization-halt
  • [p 45] [B] feature-real-dynlib-loader
  • [p 45] [T] feature-t-uforth-benchmark-harness
  • [p 45] [A] feature-toolchain-cli-ux
  • [p 45] [A] feature-writeln-as-library
  • [p 45] [A] meta-constant-normalisation
  • [p 45] [A] refactor-a-variant-object-tag-list-lives-in-four-places
  • [p 45] [A] refactor-centralize-managed-string-pchar-conversion
  • [p 45] [B] task-b-revert-pxxcio-clock-int64-cast-workaround
  • [p 45] [T] task-t-enroll-libtest-demos-watcher
  • [p 45] [T] task-t-enroll-pascal-conformance-tier
  • [p 42] [A] feature-pascal-builtin-tobject-class
  • [p 40] [N] bug-nilpy-non-ascii-string-surface-measured (unblocks 1)
  • [p 40] [A] feature-nilpy-break-continue (unblocks 1)
  • [p 40] [N] feature-nilpy-multi-arg-callback-bridges (unblocks 1)
  • [p 40] [N] bug-nilpy-dynamic-receiver-callable-field-casts-to-the-wrong-class
  • [p 40] [N] bug-nilpy-list-of-custom-objects-loses-repr-str
  • [p 40] [N] bug-nilpy-multiple-inheritance-does-not-parse
  • [p 40] [T] bug-t-check-does-not-notice-a-status-line-that-contradicts-the-folder
  • [p 40] [P] compat-pascal-index-a-function-call-result
  • [p 40] [S] feature-a-promoint-variant-esp-targets
  • [p 40] [B] feature-b-crtl-last-seven-unimplemented-declarations
  • [p 40] [A] feature-c-package-namespace-decision
  • [p 40] [A] feature-cdecl-bodied-sysv-prologue
  • [p 40] [N] feature-nilpy-arithmetic-dunders-full-protocol
  • [p 40] [N] feature-nilpy-dataclass-expression-field-default
  • [p 40] [N] feature-nilpy-hasattr-per-instance-assigned-tracking
  • [p 40] [N] feature-nilpy-map-and-filter-over-a-lambda
  • [p 40] [N] feature-nilpy-set-needs-runtime-tag-for-display-and-equality
  • [p 40] [O] feature-opt-rtti-emit-on-use
  • [p 40] [P] feature-p-assertions-directive-and-position
  • [p 40] [T] feature-twatch-full-tier-coverage-age
  • [p 40] [A] feature-unicodestring-model
  • [p 40] [T] meta-t-dev-throughput-and-track-a-t-integration
  • [p 35] [A] bug-a-write-fixed-fraction-digits-past-16-are-invented
  • [p 35] [B] bug-b-futex-helpers-are-trapped-behind-pxxclone
  • [p 35] [C] bug-c-header-with-a-body-compiles-twice-across-the-macro-reset
  • [p 35] [N] bug-nilpy-container-membership-ignores-the-eq-dunder
  • [p 35] [N] bug-nilpy-def-returning-a-precreated-global-has-no-return-type
  • [p 35] [N] bug-nilpy-list-sort-ignores-lt-dunder-on-objects
  • [p 35] [N] bug-nilpy-list-sort-method-missing
  • [p 35] [N] bug-nilpy-plain-class-callable-field-unreachable-through-a-dynamic-receiver
  • [p 35] [N] bug-nilpy-unsupported-protocols-repr-iter-getattr-delitem-hash
  • [p 35] [P] compat-pascal-calling-convention-directives-uneven
  • [p 35] [P] compat-pascal-inline-generic-specialization
  • [p 35] [B] compat-pascal-thread-api-surface-differs-from-fpc
  • [p 35] [A] feature-a-why-threadsafe-needs-45pct-more-global-fixups
  • [p 35] [B] feature-b-rtl-missing-fpc-surface-2026-08
  • [p 35] [S] feature-c-esp-conformance-coverage
  • [p 35] [S] feature-dns-esp-backend
  • [p 35] [A] feature-nested-routine-fixed-array-capture
  • [p 35] [A] feature-nilpy-arc-cross-parity
  • [p 35] [N] feature-nilpy-staticmethod-and-classmethod
  • [p 35] [N] feature-nilpy-yield-outside-a-for-loop
  • [p 35] [O] feature-opt-complex-packed-double
  • [p 35] [T] feature-pasmith-divergence-signature-granularity
  • [p 30] [S] bug-b-crtl-esp-close-cannot-dispatch-socket-vs-file
  • [p 30] [N] bug-nilpy-augmented-subscript-evaluates-its-index-twice
  • [p 30] [N] bug-nilpy-del-on-a-plain-variable-silently-does-nothing
  • [p 30] [N] bug-nilpy-encode-ignores-the-codec
  • [p 30] [N] bug-nilpy-reversed-list-repeat-returned-from-a-def-infers-int
  • [p 30] [P] compat-pascal-supports-three-arg-out-form
  • [p 30] [B] feature-b-tstrings-commatext
  • [p 30] [N] feature-nilpy-hoist-constant-container-literals-out-of-a-loop-condition
  • [p 30] [N] feature-nilpy-list-sort-inplace-key-reverse
  • [p 30] [N] feature-nilpy-small-syntax-gaps-found-by-the-2026-08-06-sweep
  • [p 30] [N] feature-nilpy-stdlib-coverage-gaps-measured
  • [p 30] [S] feature-pal-esp-posix-fd-semantics
  • [p 30] [T] feature-pasmith-qplus-rplus-rungs
  • [p 30] [D] idea-public-status-page
  • [p 30] [A] perf-c-parse-codegen-large-file-superlinear
  • [p 30] [N] perf-nilpy-remaining-perbyte-string-builders
  • [p 30] [D] task-d-document-warn-ignored-directives
  • [p 25] [P] compat-pascal-class-helpers
  • [p 25] [P] compat-pascal-directive-in-comment-ignores-nested-comments-off
  • [p 25] [P] compat-pascal-unit-deprecated-hint-directive
  • [p 25] [A] feature-a-shrink-managed-header-on-32-bit
  • [p 25] [N] feature-nilpy-for-loop-getitem-protocol-fallback
  • [p 25] [N] feature-nilpy-str-format-named-keyword-fields
  • [p 25] [O] feature-opt-alloc-intent-hint
  • [p 25] [A] feature-promo-launch-plan
  • [p 25] [T] feature-t-windows-wine-harness
  • [p 25] [C] idea-c-realworld-test-targets
  • [p 20] [P] compat-pascal-method-impl-without-declaration
  • [p 20] [A] feature-cli-widgetset-flag
  • [p 20] [B] feature-networking
  • [p 20] [O] feature-opt-float-register-temporaries
  • [p 20] [T] feature-t-nilpy-cpython-differential-fuzzer
  • [p 15] [A] compat-pascal-binop-operand-eval-order
  • [p 15] [N] feature-nilpy-nested-def-as-value
  • [p 15] [P] feature-pascal-corpus-expansion
  • [p 12] [P] task-pascal-conformance-long-tail
  • [p 10] [B] feature-crtl-implement-libc-assumptions
  • [p 10] [A] idea-adaptive-heap-growth
  • [p 10] [A] idea-cross-namespace-ambiguity-warning
  • [p 5] [A] decide-nilpy-parallel-capture-semantics (unblocks 1)

Leverage (tickets each one unblocks)

  • 3 — decide-nilpy-runtime-dunder-dispatch-strategy
  • 3 — feature-port-rtl-over-libc
  • 3 — feature-port-windows-pe
  • 2 — decide-nilpy-set-as-a-distinct-type-or-a-list
  • 2 — feature-web-track-w-bootstrap
  • 1 — bug-nilpy-non-ascii-string-surface-measured
  • 1 — decide-float-fixed-output-exact-or-fpc-17-digit-cap
  • 1 — decide-nilpy-dict-mutation-during-iteration
  • 1 — decide-nilpy-parallel-capture-semantics
  • 1 — feature-inline-asm-xmm-operands
  • 1 — feature-nilpy-break-continue
  • 1 — feature-nilpy-multi-arg-callback-bridges
  • 1 — feature-nilpy-runtime-dunder-dispatch-on-variants
  • 1 — feature-nilpy-star-args-kwargs
  • 1 — feature-nilpy-tkinter-facade
  • 1 — feature-opt-accumulator-value-tracker
  • 1 — feature-os-targets-bsd-mac
  • 1 — feature-pcl-win32-widgetset
  • 1 — feature-port-freebsd-native
  • 1 — feature-tls13-from-scratch
  • 1 — feature-typeinfo-all-types